android-fragments 如何检查碎片是否存在

0lvr5msh  于 2022-11-13  发布在  Android
关注(0)|答案(8)|浏览(259)

我正试图与来自活动的碎片交谈。
在我的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());
                } 
            }
        };
    }
rqcrx0a6

rqcrx0a61#

您可以使用findFragmentByTag()或findFragmentById()函数来获取片段。如果上述方法返回空值,则该片段不存在。

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

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

dfuffjeb

dfuffjeb2#

您可以在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");
t40tm48m

t40tm48m3#

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();
        }

    }
ff29svar

ff29svar4#

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

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

wmvff8tz5#

有很多方法可以跟踪最后添加的片段。最简单的一种是在片段管理器中找到标记。下面是它的示例代码:

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
}
n3ipq98p

n3ipq98p6#

您可以执行popBackStack从管理器的片段返回堆栈弹出最后一个片段转换。如果没有要弹出的内容,则返回false。在此处输入链接说明

pinkon5k

pinkon5k7#

你可以从片段管理器中得到以前添加的片段的列表,然后检查列表中是否包含你的片段对象。

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

crcmnpdw8#

这个不行

!getSupportFragmentManager().getFragments().contains(fragment)

这对我有用

getSupportFragmentManager().findFragmentByTag(fragment::class.java.getSimpleName()) == null

相关问题