我正在尝试与活动中的片段进行对话。
在我的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());
}
}
};
}
答案 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()