2016-04-15 81 views
3

我對xamarin Android的新學生。所以我不知道如何創建一個事件點擊。事件單擊一個項目上android.support.design.widget.NavigationView

<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"> 
 
    \t <menu> 
 
\t \t <group android:checkableBehavior="single"> 
 
\t \t \t <item 
 
    \t \t \t android:id="@+id/nav_about" 
 
    \t \t \t android:icon="@drawable/ic_lock_open_black_48dp" 
 
    \t \t \t android:title="About"/> 
 
    \t \t \t <item 
 
    \t \t \t android:id="@+id/nav_signout" 
 
    \t \t \t android:icon="@drawable/ic_perm_identity_black_48dp" 
 
    \t \t \t android:title="Sign out"/> 
 
\t \t </group> 
 
    \t \t 
 
    \t </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 
 
      \t android:id:="@+id/frameContainer" 
 
      \t android:layout_width="match_parent" 
 
      \t 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(那裏只有列表視圖)

我想,當點擊該項目2 - > fragmentgenres(那裏只有listview)

它們都顯示在frameContainer中。

+0

只是一個友情提示,您可能需要閱讀過此頁:[該如何對詢問指南(https://stackoverflow.com/help/how-to-ask),所以你總是可以肯定的是你的問題很容易回答並且儘可能清楚。一定要包括你爲解決你遇到的問題所做的任何努力,以及當你嘗試修復這些問題時發生了什麼。另外不要忘記你的顯示代碼和任何錯誤信息! –

回答

2

這是如何處理點擊相應的活動和負載片段。

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中的項目時,當前片段將被隱藏,並顯示與菜單項對應的片段。在這種方法中,每次切換菜單時都不會創建每個片段。因此頁面加載速度會更快。

+0

nav_home是它在homegragment中的listview的id嗎? –

+0

nav_home是NavigationMenu中的MenuItem的Id,它對應於HomeFragment – Sreeraj

+0

如果我想給homeFragment一個參數。怎麼做? –