【问题标题】:Adding RadioButtons to ContextMenu将 RadioButtons 添加到 ContextMenu
【发布时间】:2013-08-31 23:48:14
【问题描述】:

我想在我的上下文菜单中添加单选按钮,但我不确定如何操作。它是这样创建的:

@Override  
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  

        super.onCreateContextMenu(menu, v, menuInfo);  
        menu.setHeaderTitle("Selection Options");  
        menu.add(0, v.getId(), 0, "Remove");  
    }  

【问题讨论】:

    标签: java android menu contextmenu


    【解决方案1】:

    来自您的代码:

    menu.add(0, v.getId(), 0, "Remove"); 
    

    v 是一个可以是 RadioButton 或任何其他类型的视图的视图。

    如果您不使用 xml 来定义 RadioButton。你应该在你的应用程序中设置它的 ID。

    v.setId();

    或者您可以在 res/values 中定义 ids.xml。

    samples/ApiDemos/src/com/example/android/apis/RadioGroup1.java samples/ApiDemp/res/values/ids.xml

    菜单和上下文菜单开发者指南:

    http://developer.android.com/guide/topics/ui/menus.html

    如果您滚动上面的页面,您可以在上下文菜单中找到 RadioButton 示例。

    引用来自上述页面:

    可检查的菜单项

    菜单可以用作界面 用于打开和关闭选项,使用 独立选项的复选框,或 相互组的单选按钮 独家选项。图 2 显示了一个 带有可检查项目的子菜单 带有单选按钮。

    注意:图标菜单中的菜单项 (从选项菜单)无法显示 复选框或单选按钮。如果你 选择在图标菜单中制作项目 可检查,您必须手动指明 通过交换图标检查状态 和/或文本每次状态 变化。

    您可以定义可检查的行为 对于单个菜单项,使用 android:checkable 中的属性 元素,或整个组 使用 android:checkableBehavior 元素中的属性。为了 例如,此菜单组中的所有项目 可以通过单选按钮进行检查:

    > <?xml version="1.0" encoding="utf-8"?>
    > <menu
    > xmlns:android="http://schemas.android.com/apk/res/android">
    >     <group android:checkableBehavior="single">
    >         <item android:id="@+id/red"
    >               android:title="@string/red" />
    >         <item android:id="@+id/blue"
    >               android:title="@string/blue" />
    >     </group> </menu> The android:checkableBehavior attribute
    

    接受:

    single 组中只有一项 可以选中(单选按钮) 全部 全部 可以选中的项目(复选框)无 没有可检查的项目 您可以申请 项目的默认选中状态使用 android:checked 中的属性 元素并在代码中更改它 使用 setChecked() 方法。

    当一个可检查的项目被选中时, 系统调用你各自的 item-selected 回调方法(如 onOptionsItemSelected())。是这里 你必须设置的状态 复选框,因为复选框或收音机 按钮不改变其状态 自动地。您可以查询 项目的当前状态(因为它是 在用户选择它之前) isChecked() 然后设置检查 setChecked() 的状态。例如:

    > @Override public boolean
    > onOptionsItemSelected(MenuItem item) {
    > switch (item.getItemId()) {   case
    > R.id.vibrate:   case
    > R.id.dont_vibrate:
    >     if (item.isChecked()) item.setChecked(false);
    >     else item.setChecked(true);
    >     return true;   default:
    >     return super.onOptionsItemSelected(item);   }
    > } 
    

    如果不设置选中状态

    这样,那么可见状态 项目(复选框或单选 按钮)不会改变当用户 选择它。当你设置状态时, Activity 保留选中的 项目的状态,以便当 用户稍后打开菜单,选中 你设置的状态是可见的。

    注意:可检查的菜单项是 仅用于 每会话基础,之后不保存 应用程序被破坏。如果你 有您的应用程序设置 想为用户存钱,你 应该使用 Shared 存储数据 偏好。

    【讨论】:

    • 我没有从 XML 中扩充我的上下文菜单。我怎样才能在代码中做到这一点?
    • 不确定我是否明白你的意思。我会为 v.setId() 设置什么?
    • 为了向菜单添加视图(此处为单选按钮),您必须在菜单中添加方法。 (manu.add(...)) 此方法中的第二个参数是您的视图 id (RadioButton id)。如果您通过代码创建 RadioButton,您还需要通过代码设置其 id。但如果你是从 xml 加载它,那么它的 id 已经分配了。
    【解决方案2】:
    RadioButton rBtn1 = new RadioButton(this);
    RadioButton rBtn2 = new RadioButton(this);
    rBtn1.setText("radio button 1");
    rBtn2.setText("radio button 2");
    //Add all your RadioButtons the same way.
    
    RadioGroup group = new RadioGroup(this);
    group.addView(rBtn1);
    group.addView(rBtn2);
    
    menu.add(0, group.getId(), 0, "whatever");
    

    我没有尝试过,但我希望它有效:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多