动态替换片段

时间:2018-01-04 17:58:33

标签: android android-fragments

我试图在片段内部按下按钮时切换片段,如果新片段引发错误,它将更改回第一个片段。我按照其他答案,但没有一个工作,我得到的总是一个空白的片段。

我的主要活动是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()的按钮变为白色时。我错过了什么?

2 个答案:

答案 0 :(得分:0)

要更改视图寻呼机中的片段,您只需在viewpager上调用currentItem方法即可。例如

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

答案 1 :(得分:-1)

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

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

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