繁体   English   中英

事件单击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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM