【问题标题】:Replace fragment in ViewPager - Getting NPE [duplicate]替换 ViewPager 中的片段 - 获取 NPE [重复]
【发布时间】:2016-09-14 04:43:55
【问题描述】:

我已经搜索了有关如何在 viewPager 中替换片段的其他答案,但无济于事。

设置正常,我有2个片段。

[片段1][片段2]

在操作栏中,我有一个搜索按钮,它以覆盖模式(Google 搜索)启动一个新 Intent,然后在 onActivityResult 中我想用新片段替换当前片段。

我已经完成了 SearchFragment,如果我将它作为第三个片段添加到选项卡中,它就可以工作。但是我只想用新的搜索片段替换 Fragment2。

我有一个sectionPagerAdapter 类,它可以提供帮助。

因此,当我单击操作栏中的 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();

如果我在按下按钮时触发了片段事务,它至少不会崩溃,但它会清除寻呼机中的两个片段。所以我认为有两个问题。

谢谢

【问题讨论】:

标签: android android-viewpager


【解决方案1】:

我遇到了同样的问题,如果你在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

【讨论】:

  • 谢谢,是的,来自 onResume 的电话完成了这项工作。
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
相关资源
最近更新 更多