[英]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”。 而是調用相應的片段。 我怎樣才能使這個工作,以便選擇一個菜單項調用一個外部活動,從中獲取結果,並將它們顯示在相應的片段中?
有幾種方法可以實現這一點。 最簡單的方法是:
void someMethodOnMainActivity() {}
Activity activity = requireActivity();
if (activity instanceof MainActivity) {
((MainActivity) activity).someMethodOnMainActivity();
}
您還可以在 MainActivity 中調用onNavigationItemSelected()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.