[英]Set child fragment's ViewPager page from Activity
我的MainActivity
有一个带有ViewPager
( fragment_main
)的fragment_main
。 在我的MainActivity
我有一个BottomNavigationView
。 单击BottomNavigationView
的项目时,我想设置fragment_main
的ViewPager
页面。 我怎样才能做到这一点?
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生成片段
在bottomNavigationView click侦听器内的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.conent是FrameLayout ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.