我在菜单中添加了开/关开关。我想吐司" Switch是OFF"如果开关是"关"。但是当我从菜单开启电源时,它没有工作。我试图调试它,如果语句" if(id == R.id.myswitch)"。我试图按下简单的按钮控制它"单击按钮"。但是切换不起作用。
我已经夸大了布局" switch_layout.xml"在menuitem中
这是xml和代码:
switch_layout.xml
<?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" >
<Switch
android:id="@+id/switchForActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp" />
</RelativeLayout>
menu.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MyActivity" >
<item
android:id="@+id/myswitch"
android:title=""
android:showAsAction="always"
android:actionLayout="@layout/switch_layout"
/>
</menu>
码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==R.id.myswitch){
Switch onOff=(Switch) item.getActionView();
if( onOff.isChecked()==false){
//Toast that switch is off
}
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:1)
if (id == R.id.myswitch) {
View view = item.getActionView();
if (view != null) {
Switch onOff = (Switch) view
.findViewById(R.id.switchForActionBar);
if (onOff!=null) {
if (onOff.isChecked()) {
Toast.makeText(context,
"Switch is ON",
Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context,
"Switch is OFF",
Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(context,
"Switch is null",
Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(context,
"view is null",
Toast.LENGTH_LONG).show();
}
}
尝试此代码,如果它的工作,但我不确定它是否有效。这只是猜测。
或者您可以尝试以下代码。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
boolean bSwitch=false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
int id = menu.getItem(0).getItemId();
if (id == R.id.myswitch) {
if (bSwitch) {
menu.getItem(0).setTitle("smthng is ON");
}
else {
menu.getItem(0).setTitle("smthng is OFF");
}
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.myswitch) {
if (bSwitch) {
bSwitch=false;
}
else {
bSwitch=true;
}
}
return super.onOptionsItemSelected(item);
}
<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"
tools:context="com.newshunt.news.MainActivity" >
<item
android:id="@+id/myswitch"
android:orderInCategory="100"
android:showAsAction="always"
android:title="smthng is OFF"/>
</menu>
答案 1 :(得分:0)
if (id==R.id.myswitch){
Switch onOff=(Switch) item.getActionView();
// if( onOff.isChecked()==false){
if ( !onOff.isChecked())
//Toast that switch is off
}
}
尝试上面的代码并检查哪个ID是getID()正在返回