复选框菜单项不起作用

时间:2016-05-13 06:54:20

标签: java android android-checkbox

我在menu_check.xml中有这个但是当我点击检查时没有任何事情发生,因此Toast从未显示......问题是什么?非常感谢

  <?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"
    tools:context=".MainActivity">

    <item
        android:id="@+id/action_selecciontodo"
        android:title="@string/check"
        android:checkable="true"
        app:actionViewClass="android.widget.CheckBox"
        app:showAsAction="always" />


</menu>

这在我的java类

 public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_check, menu);

    checkBox = (CheckBox) menu.findItem(R.id.action_selecciontodo).getActionView();
    checkBox.setText("Select all");

    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_selecciontodo:
            CheckBox checkBox= (CheckBox) item.getActionView();
            if (checkBox.isChecked())
            Toast.makeText(getApplicationContext(), "You selected all", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

2 个答案:

答案 0 :(得分:2)

无需app:actionViewClass =“android.widget.CheckBox”只是这样做

在oncreate选项菜单中

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.main_menu, menu);
    return true;
}

并在onOptionsItemSelected中编写此代码

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_bookmark:
            if (item.isChecked()) {
                item.setChecked(false);
                Toast.makeText(MainActivity.this, "Un Checked", Toast.LENGTH_SHORT).show();
            } else {
                item.setChecked(true);
                Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();
            }
            break;
    }
    return super.onOptionsItemSelected(item);
}

并在菜单文件夹中的menu.xml中声明菜单,如下所示

<?xml version="1.0" encoding="utf-8"?>

<item android:id="@+id/menu_bookmark"
      android:checkable="true"
      android:title="Bookmark"/>

因此,当您选中取消选中菜单项时,它会显示吐司并显示复选框已选中或未选中

答案 1 :(得分:0)

试试这个,

  

menu_main.xml

 <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.example.stackoverflow.MainActivity" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never"/>

  <item
    android:id="@+id/action_check"
    android:title="YOUR_TITLE"
    android:orderInCategory="200"
    app:showAsAction="never"
    android:visible="true"
    android:checkable="true"/>

</menu>
  

MainActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

        SharedPreferences settings = getSharedPreferences("settings", 0);
        boolean isChecked = settings.getBoolean("checkbox", false);
        MenuItem item = menu.findItem(R.id.action_check);
        item.setChecked(isChecked);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }

    if (id == R.id.action_check) {
        item.setChecked(!item.isChecked());
        SharedPreferences settings = getSharedPreferences("settings", 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean("checkbox", item.isChecked());
        editor.commit();
        Log.i("cheeck status" , "" + item.isChecked());

        return true;
    }
    return super.onOptionsItemSelected(item);
}

这应该有效。

快乐的编码。!!!