簡體   English   中英

Android從導航抽屜上的ActionLayout獲取開關

[英]Android Get switch from ActionLayout on Navigation Drawer

如何從我的actionLayout(這是一個菜單項)中具體獲取開關,以便設置“ setOnCheckedChangeListener”事件?

這是我的導航抽屜菜單:

<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'。 如何獲取切換視圖,以便可以設置其偵聽器?

您幾乎已經弄清楚了,還有幾件事。 這是對我有用的東西!

<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) {

  }
});

我在getActionView之后還有另一個findViewById的原因是,因為getActionView將返回LinearLayout視圖,並且我們的開關位於LinearLayout內,所以我們只從返回給我們的當前LinearLayout中查找視圖ID,從而找到了findItem(R.id.nav_switch)。 getActionView()。findView ...希望這會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM