0
BottomNavigationView를 사용하여 ViewPager로 프래그먼트를 표시하는 App을 구축 중입니다.ViewPager Xamarin으로 BottomNavigationView 설정 옵션 선택
아래쪽 탐색 버튼을 밀거나 만질 때 문제가 발생하지 않아 조각이 뷰 페이지에 올바르게 표시됩니다.
문제는 viewPager를 슬라이드 할 수 있고 내가 할 때 아래쪽 탐색이 올바른 옵션으로 변경되지 않는다는 것입니다.
은 내가보기 호출기를 관리하기위한 에게 ViewPager.IOnPageChangeListener를 추가하고 세 가지 방법을 만들 필요가 있다고보고,하지만 사용자가 예를 들어 viewpager 를 밀어 때 선택한 BottomNavigation 항목을 설정하는 방법 지금 해달라고, 내가 터치 buttom 4 BottomNavigationBar과 나는 자동으로 뷰 페이저 (텍스트 "Fragment4"표시)에서 조각 4를 보았습니다. 그런 다음 Fragment1까지 ViewPager를 슬라이드했지만 BottomNavigation은 여전히 선택되어있는 option4입니다. 뷰 페이지를 슬라이드 할 때 변경되지 않음감사합니다.
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)
}
}