我正在尝试在Switch
上添加ActionBar
窗口小部件,但是当我尝试实现它时,它不显示或者是否显示,我的ActionBart
标题消失了。
我所做的是:
我为此Layout
Switch
?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.support.v7.widget.SwitchCompat
android:id="@+id/switchAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
然后在我的menu_main.xml
我添加了这个:
<item
android:id="@+id/switchId"
android:title=""
app:showAsAction="ifRoom"
android:actionLayout="@layout/swipe_wifi"
/>
我已将android
更改为app
,因为在帮助中说明了
然后在我的ActivityMain onCreateOptionsMenu()
上添加此项以进行快速测试
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
switchAB = (Switch)menu.findItem(R.id.switchId)
.getActionView().findViewById(R.id.switchAB);
switchAB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
Toast.makeText(getApplication(), "ON", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplication(), "OFF", Toast.LENGTH_SHORT)
.show();
}
}
});
return true;
}
但它在这条路上给了我一个NPE
switchAB = (Switch)menu.findItem(R.id.switchId)
//NPE--> .getActionView().findViewById(R.id.switchAB);
我要改变代码吗?
答案 0 :(得分:2)
也尝试使用app:actionLayout
:
<item
android:id="@+id/switchId"
android:title=""
app:showAsAction="ifRoom"
app:actionLayout="@layout/swipe_wifi"
/>
还应该注意的是,您将视图转换为android.widget.Switch
,而在您的布局中,您有一个android.support.v7.widget.SwitchCompat
(这是一个不错的选择,因为添加了Switch
API14)。