项目单击上的导航抽屉保留在主页片段上



我对Android比较陌生,我想为我的应用程序添加一个导航抽屉,所以我添加一个新活动并选择导航抽屉活动

活动类

import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
public class HomeActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
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);
// 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.home, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}

当我运行该应用程序并尝试单击另一个项目时,没有任何反应,它保留在主页片段上 到目前为止,我看到的大部分信息都是3.6.3版本之前的旧信息。 和其他人只是工作到目前为止我尝试过- 卸载并重新安装安卓工作室 - 更新到最新的安卓工作室(目前4个( - 创建了其他片段 - 盯着新的导航抽屉项目运行它。同样的事情

过去几天一直在做这件事,我尝试的似乎都没有奏效

标题

您可以在导航抽屉的项目上实现onClick

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener

并添加此方法来处理点击侦听器:

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here.
switch (item.getItemId()) {
case R.id.nav_home: {
//do somthing
break;
}  
case R.id.nav_gallery: {
//do somthing
break;
}  
case R.id.nav_slideshow: {
//do somthing
break;
}  
}
//close navigation drawer
drawer.closeDrawer(GravityCompat.END);
return true;
}

和其他处理点击的方式:

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id=menuItem.getItemId();
//it's possible to do more actions on several items, if there is a large amount of items I prefer switch(){case} instead of if()
if (id==R.id.nav_home){
Toast.makeText(getApplicationContext(), "Home", Toast.LENGTH_SHORT).show();
}
if (id==R.id.nav_gallery){
Toast.makeText(getApplicationContext(), "nav_gallery", Toast.LENGTH_SHORT).show();
}
if (id==R.id.nav_slideshow){
Toast.makeText(getApplicationContext(), "slideshow", Toast.LENGTH_SHORT).show();
}
//This is for maintaining the behavior of the Navigation view
NavigationUI.onNavDestinationSelected(menuItem,navController);
//This is for closing the drawer after acting on it
drawer.closeDrawer(GravityCompat.START);
return true;
}
});

您可以使用下面的行轻松关闭抽屉,方法是单击每个抽屉项目:

drawer_layout.closeDrawer(GravityCompat.END)

最新更新