【问题标题】:How restart Fragment in my Activity - Android如何在我的 Activity 中重新启动 Fragment - Android
【发布时间】:2017-10-27 19:23:37
【问题描述】:

我有一个里面有 3 个片段的活动。我需要通过单击按钮重新启动我的活动中的第一个片段。

ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new HomeFragment(), "Home");
adapter.addFrag(new CategoryFragment(), "Category");
adapter.addFrag(new FilterFragment(), "Filter");
viewPager.setAdapter(adapter);

我测试了以下方式,但不起作用并显示错误: refresh fragment at reload

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference 

【问题讨论】:

  • 这种方式不起作用显示错误:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on an null object参考

标签: android android-fragments android-activity android-viewpager fragment


【解决方案1】:

你可以用这个重新加载你的片段:

FragmentTransaction tr = getFragmentManager().beginTransaction();
tr.replace(R.id.fragment_layout, instanceFragment);
tr.commit()

instanceFragment 是您要重新加载的片段实例,fragment_layout 是您的活动布局 XML 文件中的 FrameLayout 组件。

【讨论】:

  • 什么是“your_fragment_container”和“yourFragmentInstance”?
  • yourFragmentInstance 是您要重新加载的片段的新实例,在您的情况下,是第一个; your_fragment_container 是 XML 布局文件中的 FrameLayout。我已经更新了我的答案
  • 对于任何寻求重新加载片段而不面对IllegalStateException的方法的人,请在片段的主机活动中使用上述代码
【解决方案2】:

对于 Android SDK >= 21,您可以使用以下方法:
在您的 Activity 类中添加函数 restartFragment

fun restartFragment(fragmentId: Int) {
    val currentFragment = this.supportFragmentManager.findFragmentById(fragmentId)!!

    this.supportFragmentManager.beginTransaction()
        .detach(currentFragment)
        .commit()
    this.supportFragmentManager.beginTransaction()
        .attach(currentFragment)
        .commit()
}

在您的 Fragment 调用中

(requireActivity() as <YourActivityClassName>).restartFragment(id, R.id.<your_fragment_id>)

我个人将 R.id. 从我的导航图中取为 R.id.settings_fragmentMainActivity

【讨论】:

    【解决方案3】:

    点击按钮,检查 ViewPager 的当前位置是否大于 0(第一个位置)并将其设置为第一个位置,如下所示:

    if(viewPager.getCurrentItem>0){
      viewPager.setCurrentItem(0);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多