gpt4 book ai didi

java - 如何在一个 Activity 中切换两个 fragment ?

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:48 25 4
gpt4 key购买 nike

我在应用程序栏中有两个 fragment 类和两个按钮 - 每个按钮都执行以下操作之一:

  1. 检查其他类的 fragment 是否存在
  2. 如果存在,则用其 fragment 类的新实例替换容器
  3. 如果不存在,则创建其 fragment 类的新实例

这里是示例代码:

private void openReader() {

FragmentManager fragmentManager = getFragmentManager();

ArticleListFragment fragmentList = (ArticleListFragment) fragmentManager.findFragmentById(R.id.action_list);
ArticleReaderFragment fragmentReader = (ArticleReaderFragment) fragmentManager.findFragmentById(R.id.action_reader);

if (fragmentReader==null || ! fragmentReader.isInLayout()) {

if (fragmentList==null || ! fragmentList.isInLayout()) {

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(R.id.container_id, new ArticleReaderFragment());
//ft.addToBackStack(null);
ft.commit();

} else {

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.container_id, new ArticleReaderFragment());
//ft.addToBackStack(null);
ft.commit();

}
}
else {
// fragment.update(...);
}

}

这是 Activity XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/welcome_page">

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container_id">

</FrameLayout>

</LinearLayout>

问题在于,replace 函数并没有破坏旧的fragment 类 - 它会在单击按钮时相互添加越来越多的 fragment 。

谁能告诉我我做错了什么吗?

最佳答案

我犯了很多错误:

  1. 我没有指定 fragment 的 ID
  2. 由于我无法动态设置 fragment ID,因此我需要使用标签

    ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list");

    ft.add(R.id.container_id, new ArticleListFragment(), "Action_list");
  3. 我只需要使用 findFragmentByTag(),因为 isInLayout() 总是给我 false。

这是该函数的工作版本:

private void openList() {

FragmentManager fragmentManager = getFragmentManager();

ArticleListFragment fragmentList = (ArticleListFragment) fragmentManager.findFragmentByTag("Action_list");
ArticleReaderFragment fragmentReader = (ArticleReaderFragment) fragmentManager.findFragmentByTag("Action_reader");

if (fragmentList==null) {

if (fragmentReader==null) {

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(R.id.container_id, new ArticleListFragment(), "Action_list");
//ft.addToBackStack(null);
ft.commit();

} else {

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list");
//ft.addToBackStack(null);
ft.commit();

}
}
else {
// fragment.update(...);
}
}

关于java - 如何在一个 Activity 中切换两个 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com