从Activity设置子片段的ViewPager页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Activity设置子片段的ViewPager页面相关的知识,希望对你有一定的参考价值。
我的ViewPager
里面有一个fragment_main
(MainActivity
)片段。在我的MainActivity
我有一个BottomNavigationView
。当我点击fragment_main
的项目时,我想设置ViewPager
的BottomNavigationView
页面。我怎样才能做到这一点?
PS:我已经让它工作但是我认为我没用过一个好方法。我对我的片段中的ViewPager
有所了解并设置了Item:
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
MainFragment mainFragment = null;
switch (item.getItemId()){
case R.id.nav_item_feed:
mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame);
mainFragment.viewPager.setCurrentItem(0);
break;
}
}
有用!但问题是:如果我在MainActivity
上有另一个片段怎么办?当然,我可以先用fragment_main替换它,但需要时间并且mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame)
返回null。
那么最好的方法是设置片段viewpager页面,内部父活动?
使用FrameLayout而不是ViewPager for Fragments
在bottomNavigationView单击侦听器中的case语句中使用以下行。
toFrag(ProductsFrag.newInstance(FragInstance.PRODUCTS));
public void toFrag(Fragment toFrag){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getSupportFragmentManager().beginTransaction().replace(R.id.content, toFrag).commitAllowingStateLoss();
}
}, 200);
}
这里R.id.content是FrameLayout id
以上是关于从Activity设置子片段的ViewPager页面的主要内容,如果未能解决你的问题,请参考以下文章
FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)
响应Activity中的ViewPager2 Fragments事件