2016-04-15 20 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(リストビューのみ)

これらはすべてframeContainerに表示されます。

+0

ちょうど親切なヒント、[How-To-Ask Guide](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は自宅にいるlistviewのIDですか? –

+0

nav_homeはHomeFragmentに対応するNavigationMenuのMenuItemのIDです – Sreeraj

+0

homeFragmentにパラメータを渡したい場合は、どうやってするか? –

関連する問題