无论导航路线如何,都可以处理碎片内部的背压

时间:2015-07-06 14:13:05

标签: android android-fragments navigation

我的应用程序有一个导航抽屉,其中有三个项目链接到三个片段A,B和C

当我点击任何片段的后退按钮时,应用程序退出。我通过在我的基本活动中声明这些常量来解决这个问题:

public static boolean IS_FRAGMENT_A = false;
public static boolean IS_FRAGMENT_B = false;
public static boolean IS_FRAGMENT C = false;

然后在selectView方法中我这样做了:

private void displayView(int position) {
    IS_FRAGMENT_A = false;
    IS_FRAGMENT_B = false;
    IS_FRAGMENT_C = false;
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new FragmentA();
            IS_FRAGMENT_A = true;
            break;
        case 1:
            fragment = new FragmentB();
            IS_FRAGMENT_B = true;
            break;
        case 2:
            fragment = new FragmentC();
            IS_FRAGMENT_C = true;
            break;

        default:
            break;
    }

在覆盖onBackPressed()方法中,我做了这个

public void onBackPressed() {

    if (IS_FRAGMENT_A) {
        finish();
    } else {
        displayView(0);
    }
}

当从导航抽屉导航到这些片段时,这很好。但是,当我通过ActionBar按钮转到任何片段时,onBackPressed方法不起作用。

在片段A中,我有一个ActionBar按钮,可以将我带到片段B:

public boolean onOptionsItemSelected(MenuItem menuItem) {
    int id = menuItem.getItemId();

    switch (id) {
        case R.id.action_new:

            Fragment fragmentB = new FragmentB();
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.frame_container, fragmentB);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

            return true;
        default:
            return super.onOptionsItemSelected(menuItem);

    }
}

当我通过此方法导航到FragmentB后退按钮时,应用会退出,这与我通过导航抽屉导航到它不同。

我尝试将它添加到FragmentB的onCreate()方法中,但没有运气:

 BaseActivity.IS_FRAGMENT_B = true;

我的问题是,无论我如何到达那里,如何让后退按钮在所有片段中都能正常工作?

0 个答案:

没有答案