![](/img/trans.png)
[英]getFragmentManager on android.support.design.widget.NavigationView
[英]Event click a item on android.support.design.widget.NavigationView
我是xamarin android的新生。 所以我不知道如何创建一个事件点击它。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_home_black_48dp" android:title="Home" /> <item android:id="@+id/nav_genre" android:icon="@drawable/ic_toc_black_48dp" android:title="Genres" /> <item android:id="@+id/nav_audio" android:icon="@drawable/ic_settings_input_antenna_black_48dp" android:title="Audio" /> <item android:id="@+id/nav_download" android:icon="@drawable/ic_get_app_black_48dp" android:title="Download" /> </group> <item android:title="Account"> <menu> <group android:checkableBehavior="single"> <item android:id="@+id/nav_about" android:icon="@drawable/ic_lock_open_black_48dp" android:title="About"/> <item android:id="@+id/nav_signout" android:icon="@drawable/ic_perm_identity_black_48dp" android:title="Sign out"/> </group> </menu> </item> </menu>
<!-- your content layout --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" android:titleTextColor="@android:color/background_light" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <frameLayout android:id:="@+id/frameContainer" android:layout_width="match_parent" android:layout_height="match_parent" </LinearLayout> </RelativeLayout> <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/nav_view" app:headerLayout="@layout/drawer_header" app:menu="@menu/navmenu" /> </android.support.v4.widget.DrawerLayout>
我想点击那个项目1 - > fragmenthome(只有listview)
我想点击那个项目2 - > fragmentgenres(只有listview)
它们都出现在frameContainer中。
这是如何处理点击事件并相应地加载片段。
HomeFragment homFragment;
GenresFragment genresFragment;
int currentFragmentId=Resource.Id.nav_home;
上述声明将在活动中全局化。
var navigationView = FindViewById<NavigationView> (Resource.Id.nav_view);
navigationView.NavigationItemSelected+= NavigationView_NavigationItemSelected;
CreateFragments ();
LoadInditialFragment ();
在OnCreate中添加上述代码段。
void CreateFragments()
{
homeFragment = new HomeFragment ();
genresFragment = new GenresFragment ();
}
void LoadInditialFragment()
{
var transaction = FragmentManager.BeginTransaction ();
transaction.Add (Resource.Id.frameContainer, genresFragment).Hide(genresFragment);
transaction.Add (Resource.Id.frameContainer, homeFragment);
transaction.Commit ();
}
void NavigationView_NavigationItemSelected (object sender, NavigationView.NavigationItemSelectedEventArgs e)
{
if (e.MenuItem.ItemId != currentFragmentId)
SwitchFragment (e.MenuItem.ItemId);
drawerLayout.CloseDrawers ();
}
void SwitchFragment(int FragmentId)
{
var transaction = FragmentManager.BeginTransaction ();
switch (currentFragmentId)
{
case Resource.Id.nav_home:
transaction.Hide (homeFragment).Commit ();
break;
case Resource.Id.nav_genre:
transaction.Hide (genresFragment).Commit ();
break;
}
transaction = FragmentManager.BeginTransaction ();
switch (FragmentId)
{
case Resource.Id.nav_home:
transaction.Show (homeFragment);
transaction.Commit ();
break;
case Resource.Id.nav_genre:
transaction.Show (genresFragment);
transaction.Commit ();
break;
}
currentFragmentId = FragmentId;
}
在创建片段方法中,所有片段最初都被实例化并附加到片段。 然后隐藏除了要显示的片段之外的所有片段。 然后,当用户点击NavigationView中的项目时,隐藏当前片段并显示与菜单项对应的片段。 在这种方法中,每次用户切换菜单时都不会创建每个片段。 因此页面加载速度更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.