Android Viewpager片段变为空白
在片段内部使用带有Viewpager的PagerSlidingTastrip: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的初始片段时,所有内容都显示良好(所有页面都已填充)
- 将该主片段替换为另一个片段,然后返回到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。我也有同样的问题,并且用同样的解决方案解决了它。你节省了我的时间。谢谢我很高兴能帮上忙:)