【问题标题】:Viewpager Fragments turning blankViewpager 片段变为空白
【发布时间】:2015-05-30 08:50:18
【问题描述】:

在片段内使用带有 Viewpager 的 PagerSlidingTabStrip:

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

有什么想法吗?

【问题讨论】:

    标签: android android-fragments android-viewpager pagerslidingtabstrip


    【解决方案1】:

    编写您的代码,即您用于在内部设置寻呼机适配器

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

    【讨论】:

    • 我尝试通过 notifydatasetchanged 强制适配器重绘所有内容,但它似乎不起作用。我认为这与片段管理器有关。我在初始化 pageradapter 时尝试使用 getChildFragmentManager ,但没有效果。
    • 你应该使用fragmentsatepageadapter而不是fragmentpageadapter
    【解决方案2】:

    我遇到了这样的问题

    试试这个

    mPager.setAdapter(new BasePagerAdapter(getChildFragmentManager(), getResources()));
    

    你可能有这个

    mPager.setAdapter(new BasePagerAdapter(getFragmentManager(), getResources()));
    

    编辑: 并在您的 BasePagerAdapter 扩展 FragmentStatePagerAdapter

    public class BasePagerAdapter extends FragmentStatePagerAdapter {
    

    【讨论】:

    • 我遇到了同样的问题,同样的解决方案解决了它
    • 你节省了我的时间。谢谢
    • 我很高兴能提供帮助 :)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      如果您正在使用带有主细节共享视图模型的新架构组件视图模型,并且在从细节片段返回后获得空白视图分页器,请在主片段的 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
              })
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多