Android 替换ViewPager中的片段-获取NPE
我已经搜索了关于如何替换viewPager中的片段的其他答案,但没有结果 设置是正常的,我有2个片段 [片段1][片段2] 从操作栏我有一个搜索按钮,它在覆盖模式(谷歌搜索)下启动一个新的意图,然后在onActivityResult中,我想用新的片段替换当前片段 我已经完成了SearchFragment,如果我将它作为第三个片段添加到选项卡中,它就会工作。不过,我只想用新的搜索片段替换Fragment2 我有一个很好的适应课程 因此,当我单击actionbar中的Search按钮时,我会在onActivityResult()中触发此代码 但是,应用程序崩溃并出现错误:Android 替换ViewPager中的片段-获取NPE,android,android-viewpager,Android,Android Viewpager,我已经搜索了关于如何替换viewPager中的片段的其他答案,但没有结果 设置是正常的,我有2个片段 [片段1][片段2] 从操作栏我有一个搜索按钮,它在覆盖模式(谷歌搜索)下启动一个新的意图,然后在onActivityResult中,我想用新的片段替换当前片段 我已经完成了SearchFragment,如果我将它作为第三个片段添加到选项卡中,它就会工作。不过,我只想用新的搜索片段替换Fragment2 我有一个很好的适应课程 因此,当我单击actionbar中的Search按钮时,我会在onA
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()的值
如果在按下按钮时触发片段事务,它至少不会崩溃,但会清除寻呼机中的两个片段。所以我认为有两个问题
谢谢我也遇到了同样的问题,如果您在activityresult()中提交一个片段,它将不起作用 但是你可以通过
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);
}
}
有关片段事务和错误的更多信息,请参阅
添加视图寻呼机和适配器代码,并将完整代码保存在
onactivityResult()
中,使用一些视图或处理程序发布可运行文件,并在该可运行文件中执行该任务。比如:newhandler().post(newrunnable(){})代码>谢谢,是的,从onResume打来的电话完成了任务。
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);
}
}