Android:检查片段是否在Stack中退出并重用它

时间:2016-03-09 05:05:53

标签: android android-fragments stack

您好我使用 Stack 变量来存储用户点击的片段序列

例如:[A,B,C,A,D]

现在我需要检查一个片段是否在堆栈中退出,我需要重用它。 从上面的例子中我需要重用第一个元素,即用户第四次点击时的A.

问题是我在片段A中有一个自定义键盘打开,现在如果相同的片段在堆栈中作为第四个元素键盘没有打开。但是当我反击并转到第一个元素键盘时,在第一个实例中打开一个

存储在堆栈中的代码

public void switchContent(Fragment fragment) {
    if(mContent !=null && (fragment.getClass().toString().equals(mContent.getClass().toString()))){
        getSlidingMenu().showContent();
        return;
        }

    mContent = fragment;

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.add(R.id.content_frame, mContent);
    FragmentChangeActivity.fragmentStack.lastElement().onPause();
    FragmentChangeActivity.fragmentStack.push(mContent);
    ft.commit();
    getSlidingMenu().showContent();

}

背压代码

@Override
    public void onBackPressed() {

        if (fragmentStack.size() >= 2) {
            FragmentTransaction ft = fragmentManager.beginTransaction();
            fragmentStack.lastElement().onPause();
            ft.remove(fragmentStack.pop());
            fragmentStack.lastElement().onResume();
            ft.show(fragmentStack.lastElement());
            ft.commit();
        } else {
            super.onBackPressed();
        }
    }

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

以下代码检查,如果名为SearchFragment的Fragment在backstack中存在与否,则相应地进行处理。您可以使用此逻辑来确定是否存在特定的Fragment

        FragmentManager fragmentManager=getSupportFragmentManager();
        Fragment currentFragment = (Fragment)fragmentManager.findFragmentById(R.id.mainContent);
        if(currentFragment!=null && currentFragment instanceof SearchFragment){
            //SearchFragment exists in backstack , process accordingly
        }else{
            //SearchFragment not present in backstack
        }