如何检查片段是否存在

时间:2016-06-01 06:11:00

标签: android android-fragments

我正在尝试与活动中的片段进行对话。

在我的MainActivity中,我正在添加多个片段,所以很好。

我的主要要求是,如果已添加片段,我不想添加。

那么我们如何检查这种情况呢?

请帮助我一些。

代码: -

 private void intializingFragments(Fragment fragment) {

        FragmentManager fragmentManager = getSupportFragmentManager();

        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.fragment_container, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

    private View.OnClickListener intialization() {

        return new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int getId = v.getId();

                if (getId == R.id.first) {
                    intializingFragments(new Fragment1());

                } else if (getId == R.id.second) {
                    intializingFragments(new Fragment2());

                } else if (getId == R.id.third) {
                    intializingFragments(new Fragment3());
                } 
            }
        };
    }

7 个答案:

答案 0 :(得分:18)

您可以使用findFragmentByTag()或findFragmentById()函数来获取片段。如果提到的方法返回null,则该片段不存在。

Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
if (fragmentA == null) {
    //not exist
}
else{
    //fragment exist
}

例如: - http://wiki.workassis.com/android-load-two-fragments-in-one-framelayout/

答案 1 :(得分:10)

你可能会发现片段i fragmentmanager:

List<Fragment> frags = getSupportFragmentManager().getFragments();
for(Fragment f : frags) { 
<find what you want>... 
}

或者您可以添加带标签的片段:

getSupportFragmentManager().beginTransaction()
.add(R.id.frame, new MyFragment(), "frag1")
.commit();

按标签找到

getSupportFragmentManager().findFragmentByTag("frag1");

答案 2 :(得分:2)

FragmentManager fragmentManager = getSupportFragmentManager();
     FragmentTransaction transaction = fragmentManager.beginTransaction();
                Fragment topFragment = fragmentManager.findFragmentById(R.id.container);
                FragmentA fragmentA = new FragmentA();
                if(topFragment!= null)
                {
                    transaction.remove(topFragment);
                    transaction.add(R.id.container, fragmentA, "FA");
                    transaction.commit();
                }
                else
                {
                    transaction.add(R.id.container, fragmentA, "FA");
                    transaction.commit();
                }

试试这个

private void intializingFragments(Fragment fragment) {
      FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        Fragment topFragment = fragmentManager.findFragmentById(R.id.container);
        if(topFragment!= null)
        {
            fragmentTransaction.remove(topFragment);
            fragmentTransaction.add(R.id.fragment_container, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }
        else
        {
            fragmentTransaction.add(R.id.fragment_container, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }

    }

答案 3 :(得分:1)

您可以通过多种方式跟踪最后添加的片段。最简单的方法是在片段管理器中找到标签。以下是它的示例代码:

public boolean isFragmentPresent(String tag) {
    Fragment frag = getSupportFragmentManager().findFragmentByTag(tag);
    if (frag instanceof HomeFragment) {
        return true;
    } else
        return false;
}

或者,您可以使用自己的变量来检查最后添加的片段是否与当前片段相同。以下是它的示例代码:

public boolean isCurrentFragment(Fragment fragment) {
    if (fragment instanceof HomeFragment && getLastAddedFragment() instanceof HomeFragment) { // getLastAddedFragment() is a method which return the last added fragment instance
        return true;
    } else
        return false;
}

您可以像以下一样使用它:

if (isCurrentFragment(new HomeFragment())) {
    // Last added Fragment is the HomeFragment
}

答案 4 :(得分:0)

你可以去 popBackStack 从管理器的片段后端堆栈弹出最后一个片段转换。如果没有要弹出的内容,则返回false。 enter link description here

答案 5 :(得分:0)

您可以从片段管理器中获取先前添加的片段的列表。然后只需检查列表中是否包含您的片段对象即可。

getSupportFragmentManager().getFragments().contains(yourFragment);

答案 6 :(得分:0)

如何在不知道其资源 ID 或标签的情况下检查片段是否存在:

// MyActivity.kt
val exists: Boolean = supportFragmentManager
    .fragments
    .filterIsInstance<MyFragment>()
    .isNotEmpty()