Android 动态替换片段

Android 动态替换片段,android,android-fragments,Android,Android Fragments,我试图在片段内部按下按钮时切换片段,如果新片段抛出错误,它将变回第一个片段。我遵循另一个答案,但没有一个有效,我得到的总是一片空白 我的主要活动是一个AppCompatActivity。这是onCreate()的一部分: 在主功能中,我有一个切换片段的函数 public void switchFragment(){ Fragment fragment = null; try { fragment = SecondFragment.newInstance();

我试图在片段内部按下按钮时切换片段,如果新片段抛出错误,它将变回第一个片段。我遵循另一个答案,但没有一个有效,我得到的总是一片空白

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

在主功能中,我有一个切换片段的函数

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();

启动时,第一个fragmet处于活动状态,工作正常,当我按下调用
switchFragment()
的按钮时,它变为白色。我遗漏了什么?

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

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

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

只需在设置片段之前进行空检查,即可确保在发生错误时第一个片段仍然可见:

if(片段!=null)

fragmentManager.beginTransaction().replace(R.id.viewpager,fragment.commit()

对不起,是我的错,我写了一个“错误”的标题。我已经在viewPager中设置了4个片段,我需要的是替换片段以确保,您只需要将其更改为viewPager。对吧?是的。我也有同样的活动,用这个viewPager。在这个viewPager中,我有4个片段。其中三个将永远不变,永不改变。按下按钮时,其中一个需要更换。我得到一块白色的碎片。在日志控制台中,我可以看到fragmetn已正确创建,但由于某些原因,它未连接到viewPager!不,不是空指针的问题。即使是空检查,它也会给我一个白色的屏幕,我找到了一个解决方案。我创建了一个带有FrameLayout的根片段,现在我能够正确地使用beginTransaction().replace()
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);