2016-08-19 75 views
0

我如何特别从我的actionLayout(这是一个菜单项)切换,以便设置'setOnCheckedChangeListener'事件?Android从导航抽屉中的ActionLayout获取切换

这里是我的抽屉式导航栏菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

     <item android:id="@+id/nav_switch" 
      app:actionLayout="@layout/action_view_switch" 
      android:title="One-to-one mode" /> 
</menu> 

随着action_view_switch actionlayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Switch 
     android:id="@+id/otoSwitch" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     /> 
</LinearLayout> 

最后,我的导航抽屉:

<android.support.design.widget.NavigationView 
     android:id="@+id/nvView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@android:color/white" 
     app:menu="@menu/drawer_view" 
     app:headerLayout="@layout/nav_header"/> 

我明白我可以这样做:

Menu menu = navigationView.getMenu(); 
MenuItem menuItem = menu.findItem(R.id.nav_switch); 
View actionView = MenuItemCompat.getActionView(menuItem); 
actionView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    } 
}); 

但是这并不给我像isChecked像'setOnCheckedChangeListener'会的任何状态。我如何获得切换视图,以便可以设置其侦听器?

+2

你快到了 - 'Switch otoSwitch =(Switch)menuItem.getActionView()。findViewById(R.id.otoSwitch); '。 –

回答

1

你几乎已经知道了,只是更多的东西。这是对我有用的东西!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Switch 
    android:id="@+id/otoSwitch" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    /> 

接下来你从菜单项的看法。

Menu menu = navigationView.getMenu(); 
SwitchCompat actionView = (SwitchCompat) menu.findItem(R.id.nav_switch).getActionView().findViewById(R.id.ontoSwitch); 
actionView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    } 
}); 

我之所以有另一种findViewById后getActionView是因为getActionView将返回的LinearLayout视图,我们的交换机是的LinearLayout里面,所以我们只要找到从目前的LinearLayout的视图id退还给我们,这样则findItem( (Switch).getActionView()。findView ...希望这会有所帮助

+0

这个答案应该被接受,它按预期工作。 – tryp