android - 使用 onNavigationSelect 注销
问题描述
这是我注销到 logInActivity 的代码。虽然我的片段有效,但我的注销按钮却无效。可能有什么问题?
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
FirebaseUser mFirebaseAuth;
DatabaseReference dbref;
private AppBarConfiguration mAppBarConfiguration;
private DrawerLayout drawer;
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
if (menuItem.getItemId() == R.id.nav_logout) {
FirebaseAuth.getInstance().signOut();
Intent toMain = new Intent(getApplicationContext(), LogInActivity.class);
toMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(toMain);
}
return true;
}
获取 firebase 实例 - 忽略 FAB。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFirebaseAuth = FirebaseAuth.getInstance().getCurrentUser();
dbref = FirebaseDatabase.getInstance().getReference("User").child(mFirebaseAuth.getUid());
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();
}
});
将每个菜单 ID 作为一组 ID 传递,因为每个菜单都应被视为顶级目的地。膨胀菜单;如果存在,这会将项目添加到操作栏。
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_settings, R.id.nav_task)
.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) {
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();
}
}
解决方案
implements NavigationView.OnNavigationItemSelectedListener
在课堂上实施
在 onCreate 函数中
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(this);
在类中添加函数
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
int id = menuItem.getItemId();
if(id == R.id.nav_logout) {
...
return true;
}
else {
boolean handled = NavigationUI.onNavDestinationSelected(menuItem, navController);
if (handled)
drawer.closeDrawer(navigationView);
return handled;
}
}
推荐阅读
- xamarin - Xamarin 错误域=NSURLErrorDomain 代码=-1001“请求超时。”
- powerbi - Power BI - 表中忽略的关系
- arrays - Ruby 数组条件
- javascript - 如何在图像更改为以后使用之前从图像中获取 src?
- javascript - 如何在数组中找到最大的姓氏
- python - 列出不产生多个敌人 Pygame
- c# - 在通用 Windows 平台 C# 中使用 DeviceWatcher 填充 ComboBox
- excel - Excel VBA用右侧的数据填充左侧的空列,填充列的数量不同?
- c++ - Arduino - 如何将十六进制字节转换为其等效的 ASCII 字符?
- python - Pandas Grouper:如何使用偏移量和原点来获得自定义的每月频率?