簡體   English   中英

onNavigationItemSelected 未注冊用戶選擇

[英]onNavigationItemSelected not registering user selection

我從 NavigationDrawer 活動模板開始創建了一個新的 Android 項目,因此以下代碼盡可能接近默認行為。

目前我的導航抽屜包括三個默認條目:主頁、畫廊和幻燈片。 當我單擊其中任何一個時,會顯示相應的片段。 我想做的是在按下這些項目時調用外部活動,得到一些結果,然后將結果顯示在片段中(而不是直接調用片段)。

為此,這就是我所做的:

  • 我已經在我的主要活動中實現了NavigationView.OnNavigationItemSelectedListener
  • 我已將偵聽器添加到導航視圖: navigationView.setNavigationItemSelectedListener(this);
  • 我在我的主要活動中覆蓋了onNavigationItemSelected方法

這是MainActivity.java的完整代碼(到目前為止我還沒有觸及任何其他項目文件):

package com.example.test;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.NavigationView;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private AppBarConfiguration mAppBarConfiguration;
    private DrawerLayout drawer;

    @Override
    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();
            }
        });
        drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        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);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        // Handle navigation view item clicks here.
        switch (item.getItemId()) {

            case R.id.nav_gallery: {
                Toast.makeText(getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show();
            }
        }
        //close navigation drawer
        drawer.closeDrawers();
        return true;
    }
}

當我單擊 Gallery 菜單項時,應該會出現 Toast 消息“clicked”。 而是調用相應的片段。 我怎樣才能使這個工作,以便選擇一個菜單項調用一個外部活動,從中獲取結果,並將它們顯示在相應的片段中?

有幾種方法可以實現這一點。 最簡單的方法是:

  1. 在您的活動中定義一個帶有公共訪問修飾符的函數,以便您可以在類之外訪問它。
void someMethodOnMainActivity() {}
  1. 在你的片段中:
Activity activity = requireActivity();
if (activity instanceof MainActivity) {
  ((MainActivity) activity).someMethodOnMainActivity();
}

您還可以在 MainActivity 中調用onNavigationItemSelected()

暫無
暫無

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

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