Android 对选定的导航抽屉项目执行按钮单击事件

Android perform button click event on navigation drawer item selected

我正在为我的应用程序使用 Android material 抽屉式导航,并尝试创建一个注销按钮作为抽屉式导航项之一

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments

// Toast.makeText(this, "Menu item selected -> " + position, Toast.LENGTH_SHORT).show();

    Fragment fragment = null;

    switch (position) {
        case 0:
            fragment = new AnotherFragment();
            break;
        case 1:
            fragment = new AnotherFragment();
            break;
        case 2:
            fragment = new AnotherFragment();
            break;
        case 3:
            fragment = new AnotherFragment();
            break;
        case 4:
            fragment = new AnotherFragment();
            break;
        case 5:
            fragment = new AnotherFragment();
            break;
        case 6:
            fragment = new AnotherFragment;
            break;
        case 7:
            fragment = new AnotherFragment();
            break;
        case 8:
            fragment = new AnotherFragment();
            break;
        case 9:

            break;
        default:
            break;
    }

    if (fragment != null)

    {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, fragment).commit();

    } 

在案例 9 中我想允许用户注销,

Intent logOut = new Intent(GroupHomeActivity.this, LoginActivity.class);
        getSharedPreferences("Pref", Context.MODE_PRIVATE).edit().clear().commit();
        logOut.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

如何让上述代码在案例 9 上执行?

好吧,我认为你应该这样做:

  Fragment fragment = null;

switch (position) {
    case 0:
        fragment = new AnotherFragment();
        break;
    case 1:
        fragment = new AnotherFragment();
        break;
    case 2:
        fragment = new AnotherFragment();
        break;
    case 3:
        fragment = new AnotherFragment();
        break;
    case 4:
        fragment = new AnotherFragment();
        break;
    case 5:
        fragment = new AnotherFragment();
        break;
    case 6:
        fragment = new AnotherFragment;
        break;
    case 7:
        fragment = new AnotherFragment();
        break;
    case 8:
        fragment = new AnotherFragment();
        break;
    case 9:
        fragment=null;
        break;
    default:
        break;
}

if (fragment != null)

{
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, fragment).commit();

} 
  else {

Intent logOut = new Intent(GroupHomeActivity.this, ElgarLoginActivity.class);
    getSharedPreferences("Pref", Context.MODE_PRIVATE).edit().clear().commit();
    logOut.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

   }

只是因为 return 类型需要一个非空片段。好吧,只是 return 一个空片段,然后在空片段上注销用户。

以下是我将如何处理位置 9 点击的逻辑

@Override
public void onNavigationDrawerItemSelected(int position) {
        if(position == 9){
            Intent logOut = new Intent(GroupHomeActivity.this, ElgarLoginActivity.class);
            getSharedPreferences("Pref", Context.MODE_PRIVATE).edit().clear().commit();
            logOut.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        }else{
            switchFragment(position);
        }

}

这是切换片段的方法。

private void switchFragment(int position){
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new AnotherFragment();
            break;
        case 1:
            fragment = new AnotherFragment();
            break;
        case 2:
            fragment = new AnotherFragment();
            break;
        case 3:
            fragment = new AnotherFragment();
            break;
        case 4:
            fragment = new AnotherFragment();
            break;
        case 5:
            fragment = new AnotherFragment();
            break;
        case 6:
            fragment = new AnotherFragment;
            break;
        case 7:
            fragment = new AnotherFragment();
            break;
        case 8:
            fragment = new AnotherFragment();
            break;
        default:
            break;
    }
    if (fragment != null){
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, fragment).commit();
    } 
}

只要在 break 之前把你的代码放在 case 9 之后。像这样:

Case 9:
Intent logOut = new Intent(GroupHomeActivity.this, ElgarLoginActivity.class);
getSharedPreferences("Pref", Context.MODE_PRIVATE).edit().clear().commit();     logOut.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
StartActivity(logout);
break;