Android Fragments 视图页导航片段变为空白

cunj1qz1  于 12个月前  发布在  Android
关注(0)|答案(5)|浏览(128)

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

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

有什么想法吗?

9ceoxa92

9ceoxa921#

我也遇到过这样的问题
试试这个

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

你可能有这个

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

编辑:在BasePagerAdapter中扩展FragmentStatePagerAdapter

public class BasePagerAdapter extends FragmentStatePagerAdapter {
fnatzsnv

fnatzsnv2#

写你的代码,即你正在使用设置你的寻呼机适配器内

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

x4shl7ld3#

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

2exbekwf

2exbekwf4#

很抱歉在旧帖子上回复,但写这篇文章是因为我的特定问题没有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
        })
    }
}
rqqzpn5f

rqqzpn5f5#

如果在主片段A下有多个片段,从片段B移动到片段A,这不会显示UI,这只是因为您在代码中使用了getSupportFragmentManager(),这是在更新父片段。
使用用途:代替getSupportFragmentManager()getChildFragmentManager()在你的代码中。

相关问题