Java 如何在一个活动中切换两个片段?
我在应用程序栏中有两个Java 如何在一个活动中切换两个片段?,java,android,xml,android-fragments,Java,Android,Xml,Android Fragments,我在应用程序栏中有两个fragment类和两个按钮-每个按钮执行以下操作之一: 检查是否存在来自其他类的片段 如果存在,则将容器替换为其片段类的新实例 如果不存在,则创建他的片段类的新实例 以下是示例代码: private void openReader() { FragmentManager fragmentManager = getFragmentManager(); ArticleListFragment fragmentList = (ArticleListFragm
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(...);
}
}
下面是活动
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
类-它是随着按钮的单击而相互添加越来越多的片段
谁能告诉我做错了什么吗?我犯了很多错误:
ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list");
或
findFragmentByTag()
,因为isInLayout()
总是给我falseprivate 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(...);
}
}
我犯了很多错误:
ft.replace(R.id.container_id, new ArticleListFragment(), "Action_list");
或
findFragmentByTag()
,因为isInLayout()
总是给我falseprivate 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(...);
}
}