[英]Set child fragment's ViewPager page from Activity
I have a fragment with a ViewPager
( fragment_main
) inside my MainActivity
. 我的
MainActivity
有一个带有ViewPager
( fragment_main
)的fragment_main
。 On my MainActivity
I have a BottomNavigationView
. 在我的
MainActivity
我有一个BottomNavigationView
。 I want to set the fragment_main
's ViewPager
' page when I click the items of BottomNavigationView
. 单击
BottomNavigationView
的项目时,我想设置fragment_main
的ViewPager
页面。 how can I do that? 我怎样才能做到这一点?
PS: I already made it work but I don't think I used a good way.I got a refrence to my ViewPager
inside my fragment and I set the Item: 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;
}
}
It works! 有用! But the problem is: what if I have another fragment on my
MainActivity
? 但是问题是:如果我的
MainActivity
上还有另一个片段怎么办? Sure, I can replace it with fragment_main first but it takes time and mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame)
returns null. 当然,我可以先用fragment_main替换它,但要花些时间,并且
mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame)
返回null。
So whats the best way to set fragment's viewpager's page, Inside parent activity? 那么,设置片段的viewpager页面,在父活动内部的最佳方法是什么?
Use FrameLayout instead of ViewPager for Fragments 使用FrameLayout代替ViewPager生成片段
Use below line in your case statement inside bottomNavigationView click listener. 在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);
}
here R.id.conent is FrameLayout id 这里R.id.conent是FrameLayout ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.