簡體   English   中英

onNavigationItemSelected 不適用於導航抽屜

[英]onNavigationItemSelected is not working on Navigation Drawer

我正在嘗試獲取導航抽屜項目的點擊事件。 我所做的如下。

(1) 創建一個新的 Android 源項目,在“選擇項目模板”上選擇“導航抽屜活動”。 (最小 SDK:API 22 - Lollipop)

(2) 在'/res/menu/activity_main_drawer.xml'中添加一項。

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_menu_camera"
        android:title="@string/menu_home" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="@string/menu_gallery" />
    <item
        android:id="@+id/nav_slideshow"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="@string/menu_slideshow" />
</group>

<item
    android:id="@+id/menu_notification"
    android:icon="@drawable/ic_menu_slideshow"
    android:title="Notification" />

(3) MainActivity實現NavigationItemSelectedListener,並定義事件函數-onNavigationItemSelected()

公共類 MainActivity 擴展 AppCompatActivity 實現 NavigationView.OnNavigationItemSelectedListener {

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.menu_notification) {
        Toast.makeText(this, "Menu - Notification", Toast.LENGTH_SHORT).show();
    }
    return true;
}

(4) 在 onCreate() 方法中將 NavigationItemSelectedListener 設置為 MainActivity。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.bringToFront();
    navigationView.setNavigationItemSelectedListener(this);
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this,
        R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
}

這就是我所做的。 在模擬器上運行此應用程序后,我單擊了新菜單項(通知),但沒有任何反應。 onNavigationItemSelected() 無法獲取項目點擊事件。

我必須做什么才能獲得導航抽屜項目的點擊事件?

這不起作用的原因是因為您正在使用Navigation Component 如果要onNavigationItemSelected方法,請刪除下面提到的行:

    NavigationUI.setupWithNavController(navigationView, navController);

在那之后,請記住您應該手動管理所選項目,因為導航不再為您管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM