Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 片段事务删除_Java_Android_Android Fragments_Fragmentmanager - Fatal编程技术网

Java 片段事务删除

Java 片段事务删除,java,android,android-fragments,fragmentmanager,Java,Android,Android Fragments,Fragmentmanager,我有一个片段,我添加了一个标签,如下所示: getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,fragment,fragment_tag).commit(); 在某个时刻,在另一个片段中,我需要删除此片段,因此我调用: fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag); if(

我有一个片段,我添加了一个标签,如下所示:

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,fragment,fragment_tag).commit();
在某个时刻,在另一个片段中,我需要删除此片段,因此我调用:

fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag);
if(fragment != null && fragment.isAdded())
    fragmentManager.beginTransaction().remove(fragment).commit();
理论上,下一次我为刚刚删除的片段调用
findFragmentByTag()
时,应该会得到一个空值,但是,下一次我调用它时:

fragment = getActivity().getSupportFragmentManager().findFragmentByTag(fragment_tag);
if(fragment != null)
if语句为true,因此它实际上找到了带有该标记的片段

我的问题是,我如何完全删除一个片段


考虑到要删除的片段可能不在backstack的顶部,这意味着
popBackStack()
不是一个解决方案。

删除片段后,它可能仍在片段管理器后堆栈中,因此要完全删除它,必须从片段管理器后堆栈中删除,因此,您必须通过调用fragmentManager.popBackStack(String,int)方法将其从后堆栈中弹出

看看这个方法

删除片段后,它可能仍在片段管理器后堆栈中,因此要完全删除它,必须从片段管理器后堆栈中删除if,因此必须通过调用fragmentManager.popBackStack(String,int)方法将其从后堆栈中弹出

看看这个方法

谢谢您的关注。检查我编辑的问题。碎片可能不在靠背的顶部你试过了吗?如果要立即删除它,可以调用popackstackimeditely();我确实试过了。我已经搜索过提供此解决方案的软件,但这对我的案例没有帮助,而且片段没有在活动布局文件中声明?假设我有5个片段,它们被添加到活动中,我打算删除的片段不在backbackback的顶部。所有这些都添加到活动中,每个都有自己的标记感谢您的关注。检查我编辑的问题。碎片可能不在靠背的顶部你试过了吗?如果要立即删除它,可以调用popackstackimeditely();我确实试过了。我已经搜索过提供此解决方案的软件,但这对我的案例没有帮助,而且片段没有在活动布局文件中声明?假设我有5个片段,它们被添加到活动中,我打算删除的片段不在backbackback的顶部。所有这些都添加到活动中,每个都有自己的标记。请说明这将如何解决问题,或者这将如何解决问题。请说明这将如何解决问题,或者这将如何解决问题。诀窍在于,您找到的片段是
isRemoving
,所以你可以忽略它。@Ricardo你解决这个问题了吗?我面对的是同一个。诀窍是你找到的片段正在删除,所以你可以忽略它。@Ricardo你解决这个问题了吗?我面对的是同一个。
int index = getSupportFragmentManager().getFragments().indexOf(oldfragment);
        getSupportFragmentManager().getFragments().set(index, null);