在片段内部使用带有Viewpager的PagerSlidingTabStrip:
- 主"活动"包含一个"主片段",它会根据您在导航抽屉中单击的项目而更改
- 当加载包含Viewpager的初始片段时,所有内容都显示良好(所有页面都已填充)
- 将该主片段替换为另一个片段,然后返回到viewpager片段,会将viewpager中的每一页都变为空白,但PagerSlidingTabStrip选项卡仍然存在
有什么想法吗?
我遇到了类似的问题
试试这个
mPager.setAdapter(new BasePagerAdapter(getChildFragmentManager(), getResources()));
你可能有这个
mPager.setAdapter(new BasePagerAdapter(getFragmentManager(), getResources()));
编辑:以及在BasePagerAdapter中扩展FragmentStatePagerAdapter
public class BasePagerAdapter extends FragmentStatePagerAdapter {
编写您用于在中设置寻呼机适配器的代码
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
pager.setAdapter(adapter);
}
用getChildFragmentManager()
替换getFragmentManager()
帮助了我。
很抱歉回复一篇旧帖子,但写这篇文章是因为针对我的特定问题的非堆栈溢出解决方案帮助了我。
如果您使用的是带有主-细节共享视图模型的新架构组件视图模型,并且从细节片段返回后获得空白视图寻呼机,请在主片段的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
})
}
}