【问题标题】:Replacing fragments dynamically [duplicate]动态替换片段[重复]
【发布时间】:2018-06-14 12:31:22
【问题描述】:

我正在尝试在片段本身内部按下按钮时切换片段,如果新片段引发错误,它将变回第一个片段。我跟着其他答案,但没有奏效,我得到的总是一个空白片段。

我的主要活动是AppCompatActivity。这是onCreate()的一部分:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    FragmentAdapter pageAdapter = new FragmentAdapter(getSupportFragmentManager(), MainActivity.this);
    viewPager.setAdapter(pageAdapter);
}

在主要活动中我有这个功能来切换片段

public void switchFragment(){
    Fragment fragment = null;
    try {
        fragment = SecondFragment.newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }
    // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.viewpager, fragment).commit();
}

在 FirstFragment 类内部:

((MainActivity) activityReference.get().getActivity()).switchFragment();

在启动时,第一个片段处于活动状态并且运行良好,当我按下调用 switchFragment() 的按钮时,它变成白色。我错过了什么?

【问题讨论】:

  • 我找到了解决方案。我用 FrameLayout 创建了一个根片段,现在我可以正确使用 beginTransaction().replace()

标签: android android-fragments


【解决方案1】:

要更改视图分页器中的片段,您只需在视图分页器上调用 currentItem 方法即可。例如

viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);

【讨论】:

  • 对不起,我的错,我写了一个“错误”的标题。我已经在 viewPager 中设置了 4 个片段,我需要替换片段
  • 只是为了确定,您只需要为 viewPager 更改它。对吗?
  • 是的。我有同样的活动,这个 viewPager。在这个 viewPager 里面我有 4 个片段。其中3个将永远相同,永远不会改变。在其中按下按钮时需要更换其中之一。我得到一个白色碎片。我在日志控制台中看到的是,fragmetn 已正确创建,但由于某种原因它没有附加到 viewPager!
【解决方案2】:

从您的代码中,您的fragment = SecondFragment.newInstance(); 行可能会引发错误,在这种情况下,当片段到达fragmentManager.beginTransaction().replace(R.id.viewpager, fragment).commit(); 时,片段将为null,这可能会导致您得到一个空白片段。

在设置片段之前进行空检查将确保您的第一个片段在发生错误的情况下仍然可见:

if (fragment != null) fragmentManager.beginTransaction().replace(R.id.viewpager, fragment).commit();

【讨论】:

  • 不,不是nullPointer的问题。即使有空检查,它也会给我白屏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2016-02-05
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多