如何在操作栏 android 中添加切换侦听器?
How to add switch listener in action bar android?
我正在尝试向操作栏中的开关添加一个侦听器,因为我已经在 Whosebug 上阅读了很多关于它的答案,但我的应用程序在以下几点崩溃了。
我的主菜单xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/myswitch"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/switch_layout"/>
</menu>
我的开关布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.SwitchCompat
android:id="@+id/switchForActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</RelativeLayout>
我的创建选项菜单是这个
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mainmenu, menu);
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if (item.getItemId() == R.id.myswitch) {
View view = MenuItemCompat.getActionView(item);
if (view != null) {
**Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);**
//to do add a listener for this switch
}
}
}
return true;
}
在不断调试中我发现 Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar); 这一行导致应用程序崩溃。我希望我的问题现在很清楚了。我想将一个侦听器附加到我的操作栏开关,但我无法获得该开关对象的实例。以上是 Whosebug 上的大多数答案的指示方式。对此的任何帮助将不胜感激。
谢谢
Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);
应该是
SwitchCompat mainSwitchOnOffSw = (SwitchCompat) view.findViewById(R.id.switchForActionBar);
因为您在布局中使用了 SwitchCompat。
我正在尝试向操作栏中的开关添加一个侦听器,因为我已经在 Whosebug 上阅读了很多关于它的答案,但我的应用程序在以下几点崩溃了。
我的主菜单xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/myswitch"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/switch_layout"/>
</menu>
我的开关布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.SwitchCompat
android:id="@+id/switchForActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</RelativeLayout>
我的创建选项菜单是这个
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mainmenu, menu);
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if (item.getItemId() == R.id.myswitch) {
View view = MenuItemCompat.getActionView(item);
if (view != null) {
**Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);**
//to do add a listener for this switch
}
}
}
return true;
}
在不断调试中我发现 Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar); 这一行导致应用程序崩溃。我希望我的问题现在很清楚了。我想将一个侦听器附加到我的操作栏开关,但我无法获得该开关对象的实例。以上是 Whosebug 上的大多数答案的指示方式。对此的任何帮助将不胜感激。
谢谢
Switch mainSwitchOnOffSw = (Switch) view.findViewById(R.id.switchForActionBar);
应该是
SwitchCompat mainSwitchOnOffSw = (SwitchCompat) view.findViewById(R.id.switchForActionBar);
因为您在布局中使用了 SwitchCompat。