我已经搜索了有关如何在viewPager中替换片段的其他答案,但无济于事。
设置是常见的,我有2个片段。
[片段1] [Fragment2]
在操作栏中,我有一个搜索按钮,以叠加模式(Google搜索)启动新的Intent,然后在onActivityResult中我想用新的片段替换当前的片段。
我已经完成了SearchFragment,如果我在标签中将其添加为第3个片段,它就可以了。但是我只想用新的搜索片段替换Fragment2。
我有一个有帮助的sectionsPagerAdapter类。
因此,当我单击操作栏中的searchButton时,我在onActivityResult()中触发此代码
SearchFragment searchFragment = new SearchFragment();
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.container, searchFragment)
.addToBackStack(null)
.commit();
然而,该应用程序崩溃并出现错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.app/com.example.MainActivityTabs}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at com.example.MainActivityTabs.onActivityResult(MainActivityTabs.java:168)
168是.commit();
如果我按下按钮时触发片段事务,它至少不会崩溃,但它会清除寻呼机中的两个片段。所以我认为那里有两个问题。
由于
答案 0 :(得分:0)
我遇到了同样的问题,如果您在onActivityResult()
但你可以通过
实现这一目标boolean replaceFragment=false;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
replaceFragment = true;
}
@Override
public void onResume() {
super.onResume();
if (replaceFragment) {
replaceFragment = false;
//do your fragment transaction in handler with some time
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//Do your fragment transaction here
}
}, 500);
}
}
有关片段事务和错误的更多信息,请参阅 https://medium.com/@bherbst/the-many-flavors-of-commit-186608a015b1#.9gnzh4wqi