Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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
Android 如何处理backbackback以用不同的数据替换相同的片段_Android_Android Fragments_Fragment Backstack - Fatal编程技术网

Android 如何处理backbackback以用不同的数据替换相同的片段

Android 如何处理backbackback以用不同的数据替换相同的片段,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,为了在1个活动中的片段之间导航,我实现了一个名为fragmentSwicher的方法,该方法获取一个片段并用容器中的激活片段替换它 到目前为止还不错,但现在的问题是我想用不同的数据重新使用片段,但是我的fragmentSwitcher方法拒绝更改片段,因为backbackback中存在片段 公共无效碎片切换器(碎片frg){ 字符串backStateName=frg.getClass().getName(); String fragmentTag=backStateName; FragmentM

为了在1个活动中的片段之间导航,我实现了一个名为
fragmentSwicher
的方法,该方法获取一个片段并用容器中的激活片段替换它

到目前为止还不错,但现在的问题是我想用不同的数据重新使用片段,但是我的
fragmentSwitcher
方法拒绝更改片段,因为
backbackback
中存在片段

公共无效碎片切换器(碎片frg){
字符串backStateName=frg.getClass().getName();
String fragmentTag=backStateName;
FragmentManager=getFragmentManager();
布尔fragmentPopped=manager.popBackStackImmediate(backStateName,0);
FragmentTransaction ft=manager.beginTransaction();
//检查碎片是否是从Backback弹出的,并且Backback中没有我们想要替换的碎片
如果(!fragmentPopped&&manager.findFragmentByTag(fragmentTag)==null){
ft.更换(R.id.主容器、frg、碎片标签);
}
//使用此方法,我们确保没有加载片段进入FramentBackback列表,因此,我们可以安全返回。
如果(!backStateName.equals(“com.thetba.websitebuilder.fragments.ProgressFragments”)){
ft.addToBackStack(backStateName);
}
ft.commit();
}
这是在MainActivity中处理
backstack
的方法:

@覆盖
public void onBackPressed(){
如果(getFragmentManager().GetBackBackbackEntryCount()==1){
完成();
//检查backbackback中是否有多个碎片,并显示出来
}否则{
getFragmentManager().popBackStack();
}
}
我试图通过以下方式部分解决这个问题:我

ft.replace(R.id.main_容器、frg、碎片标签);

    if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
        ft.replace(R.id.main_container, frg, fragmentTag);
    }
fragmentSwitcher()
用不同的数据替换相同的片段,但当用户按下后退按钮时,他/她将面对此片段:

com.thetba.websitebuilder.fragments.ProgressFragments
这不在
backstack


也就是说,当替换相同的片段时,我应该如何处理
backstack

这个问题是因为替换了相同的片段类,虽然您可以用另一个数据重新填充片段,但是,在这个解决方案中处理
backstack

因此,为了达到这个目的,只有您可以引入具有新名称的新片段进行替换。为此,您可以在
backstackName
string的末尾添加一些随机的东西

例如:

if(backStateName.contains(“com.thetba.websitebuilder.fragments.PagesFragment”)){
backStateName+=String.valueOf(getRandomInt(10500));
}

这个问题是因为替换了相同的片段类,虽然您可以用另一个数据重新填充片段,但是,在这个解决方案中处理
BackStack
是复杂的

因此,为了达到这个目的,只有您可以引入具有新名称的新片段进行替换。为此,您可以在
backstackName
string的末尾添加一些随机的东西

例如:

if(backStateName.contains(“com.thetba.websitebuilder.fragments.PagesFragment”)){
backStateName+=String.valueOf(getRandomInt(10500));
}