我正在建立一个应用程序在哪里我使用BottomNavigationView并显示片段与ViewPager。BottomNavigationView设置选项与ViewPager选择Xamarin
当我推动或触摸底部导航的臀部时,我没有问题,片段在viewpager中正确显示。
问题是我只能滑动viewPager,当我这样做时,底部导航不会更改为正确的选项。
我看到了,我需要添加ViewPager.IOnPageChangeListener并创建三个方法管理视图寻呼机,但现在我不如何设置BottomNavigation项目选择,当用户滑动viewpager 例如,我碰buttom 4 BottomNavigationBar和我在视图分页器(我显示文本“Fragment4”)中看到了片段4,然后我滑动ViewPager直到Fragment1,但BottomNavigation仍然是选项4,它当我滑动UU
我希望你能帮助我viewpager不改变,感谢
public class MainActivity : AppCompatActivity, ViewPager.IOnPageChangeListener
{
private DrawerLayout drawerLayout;
ViewPager viewPager;
BottomNavigationView bottomNavigation;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView (Resource.Layout.Main);
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += Navigation_NavigationItemSelected;
SupportToolbar toolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionbar actionBar = SupportActionBar;
actionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu);
actionBar.SetDisplayHomeAsUpEnabled(true);
drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout);
NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
if (navigationView != null)
{
setUpDrawerContent(navigationView);
}
//TabLayout tabs = FindViewById<TabLayout>(Resource.Id.tabs);
viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);
setUpViewPager(viewPager);
//tabs.SetupWithViewPager(viewPager);
}
private void Navigation_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
switch (e.Item.ItemId)
{
case Resource.Id.navigation_myState:
viewPager.SetCurrentItem(0, false);
break;
case Resource.Id.navigation_study:
viewPager.SetCurrentItem(1, false);
break;
case Resource.Id.navigation_flashcards:
viewPager.SetCurrentItem(2, false);
break;
case Resource.Id.navigation_test:
viewPager.SetCurrentItem(3, false); ;
break;
}
}
private void setUpViewPager(ViewPager viewPager)
{
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
adapter.AddFragment(new Fragment1(), "Fragment1");
adapter.AddFragment(new Fragment2(), "Fragment2");
adapter.AddFragment(new Fragment3(), "Fragment3");
adapter.AddFragment(new Fragment4(), "Fragment4");
viewPager.Adapter = adapter;
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
switch (item.ItemId)
{
case Android.Resource.Id.Home:
drawerLayout.OpenDrawer((int)GravityFlags.Left);
return true;
default:
return base.OnOptionsItemSelected(item);
}
}
private void setUpDrawerContent(NavigationView navigationView)
{
navigationView.NavigationItemSelected += (object sender, NavigationView.NavigationItemSelectedEventArgs e) =>
{
e.MenuItem.SetChecked(true);
drawerLayout.CloseDrawers();
};
}
public class ViewPagerAdapter : FragmentPagerAdapter
{
public List<SupportFragment> Fragments { get; set; }
public List<string> FragmentsNames { get; set; }
public ViewPagerAdapter(SupportFragmentManager FragManager) : base (FragManager)
{
Fragments = new List<SupportFragment>();
FragmentsNames = new List<string>();
}
public void AddFragment(SupportFragment fragment, string name)
{
Fragments.Add(fragment);
FragmentsNames.Add(name);
}
public override int Count
{
get
{
return Fragments.Count;
}
}
public override SupportFragment GetItem(int position)
{
return Fragments[position];
}
public override ICharSequence GetPageTitleFormatted(int position)
{
return new Java.Lang.String(FragmentsNames[position]);
}
}
public void OnPageScrollStateChanged(int state)
{
throw new NotImplementedException();
}
public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
throw new NotImplementedException();
}
public void OnPageSelected(int position)
{
//I think that here I need to put something like bottomNavigatin.setItemselecte(position) or (bottomNavigation.something(Resource.Id.navigation_flashcards)
}
}