AndroidプロジェクトにサイドバーNavigationDrawer
を実装しようとしています。そのために、NavigationView
にDrawerLayout
を使用しました。アイテムを表示するにはメニューを使用しました。追加したメニュー項目にクリックイベントを追加したいと思います。
参照用コード:ナビゲーションメニュー内-
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/nav_account" Android:title="My Account"/>
<item Android:id="@+id/nav_settings" Android:title="Settings"/>
<item Android:id="@+id/nav_layout" Android:title="Log Out"/>
</menu>
ビューで:
<Android.support.design.widget.NavigationView
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
app:menu="@menu/navigation_menu"
Android:layout_gravity="start" />
アクティビティにリスナーを実装します。
public class HomeActivity extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener
onCreate ofActivityのsetNavigationItemSelectedListener
NavigationView mNavigationView = (NavigationView) findViewById(R.id.account_navigation_view);
if (mNavigationView != null) {
mNavigationView.setNavigationItemSelectedListener(this);
}
メソッドをオーバーライドする
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_account) {//DO your stuff }
...
}
OnNavigationItemSelectedListener(MenuItem item)
メソッドを使用する必要があります。
詳細については、これを確認してください ドキュメント 。
これがJava 8のアプローチでより小さな定型文("implements"なしアクティビティにあります)です。クラスが抽象的であなたがこの機能を他のすべての子に実装したくない:
@Override
protected void onCreate(
Bundle savedInstanceState) {
NavigationView navigationView =
findViewById(
R.id.navigationView);
navigationView.setNavigationItemSelectedListener(
MyActivity::onNavigationItemSelected);
}
public static boolean onNavigationItemSelected(MenuItem item) {
if (item.getId() == R.id.my_item) {
myItemClickHandler();
}
return false;
}