Android Viewpager片段变为空白

Android Viewpager片段变为空白,android,android-fragments,android-viewpager,pagerslidingtabstrip,Android,Android Fragments,Android Viewpager,Pagerslidingtabstrip,在片段内部使用带有Viewpager的PagerSlidingTastrip: 主活动包含一个“主片段”,它根据您在导航抽屉中单击的项目而变化 加载包含Viewpager的初始片段时,所有内容都显示良好(所有页面都已填充) 将该主片段替换为另一个片段,然后返回到viewpager片段将使viewpager中的每一页都变为空白,但PagerSlidingTabStrip选项卡仍然存在 有什么想法吗?写下你用来在里面设置寻呼机适配器的代码 @Override public void onResu

在片段内部使用带有Viewpager的PagerSlidingTastrip:

  • 主活动包含一个“主片段”,它根据您在导航抽屉中单击的项目而变化
  • 加载包含Viewpager的初始片段时,所有内容都显示良好(所有页面都已填充)
  • 将该主片段替换为另一个片段,然后返回到viewpager片段将使viewpager中的每一页都变为空白,但PagerSlidingTabStrip选项卡仍然存在

有什么想法吗?

写下你用来在里面设置寻呼机适配器的代码

@Override
public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    pager.setAdapter(adapter);
}

我有这样的问题

试试这个

mPager.setAdapter(new BasePagerAdapter(getChildFragmentManager(), getResources()));
你可能有这个

mPager.setAdapter(new BasePagerAdapter(getFragmentManager(), getResources()));
编辑: 在BasePagerAdapter中扩展FragmentStatePagerAdapter

public class BasePagerAdapter extends FragmentStatePagerAdapter {

getChildFragmentManager()
替换
getFragmentManager()
对我有帮助。

很抱歉回复一篇旧文章,但写这篇文章是因为没有针对我的特定问题的Stackoverflow解决方案对我有帮助

如果您将新的架构(architecture)组件视图模型与主细节共享视图模型一起使用,并且在从“细节片段获取空白视图”页面返回后,请在主片段的
onViewCreated
方法中执行视图模型初始化,而不是在
onCreate
中执行视图模型初始化(仅在主片段中需要)

正如其他答案所说,记住在视图寻呼机适配器中使用childFragmentManager

像这样:

class SharedViewModel : ViewModel() {
    val selected = MutableLiveData<Item>()

    fun select(item: Item) {
        selected.value = item
    }
}

class MasterFragment : Fragment() {

    private lateinit var itemSelector: Selector

    private lateinit var model: SharedViewModel

    // In the master fragment do the view model initialization in onViewCreated
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        model = activity?.run {
            ViewModelProviders.of(this).get(SharedViewModel::class.java)
        } ?: throw Exception("Invalid Activity")
        model.selected.observe(this, Observer<Item> { item ->
            // Update the UI
        })
    }
}

class DetailFragment : Fragment() {

    private lateinit var model: SharedViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        model = activity?.run {
            ViewModelProviders.of(this).get(SharedViewModel::class.java)
        } ?: throw Exception("Invalid Activity")
        model.selected.observe(this, Observer<Item> { item ->
            // Update the UI
        })
    }
}
class-SharedViewModel:ViewModel(){
val selected=MutableLiveData()
乐趣选择(项目:项目){
selected.value=项目
}
}
类MasterFragment:Fragment(){
私有lateinit变量项选择器:选择器
私有lateinit变量模型:SharedViewModel
//在主片段中,在onViewCreated中进行视图模型初始化
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
模型=活动?运行{
ViewModelProviders.of(this.get)(SharedViewModel::class.java)
}?:抛出异常(“无效活动”)
model.selected.observe(此,观察者{item->
//更新用户界面
})
}
}
类DetailFragment:Fragment(){
私有lateinit变量模型:SharedViewModel
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
模型=活动?运行{
ViewModelProviders.of(this.get)(SharedViewModel::class.java)
}?:抛出异常(“无效活动”)
model.selected.observe(此,观察者{item->
//更新用户界面
})
}
}

我已尝试通过notifydatasetchanged强制适配器重新绘制所有内容,但似乎不起作用。我想这必须和碎片经理有关。在初始化pageradapter时,我尝试过使用getChildFragmentManager,但没有效果。你应该使用FragmentSatePageAdapter而不是FragmentPageAdapter。我也有同样的问题,并且用同样的解决方案解决了它。你节省了我的时间。谢谢我很高兴能帮上忙:)