【问题标题】:Dialog with checkbox in AndroidAndroid中带有复选框的对话框
【发布时间】:2013-01-02 12:37:11
【问题描述】:

我找到了带有复选框的对话框示例:

final int DIALOG_ITEMS = 1;
    String data[] = { "one", "two", "three", "four" };
    @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button but1=(Button) findViewById(R.id.button1);
            but1.setOnClickListener(new OnClickListener() 
            {
                @Override
                public void onClick(View arg0) 
                {
                     showDialog(DIALOG_ITEMS);
                }
            }); 
        }

        protected Dialog onCreateDialog(int id) {
            AlertDialog.Builder adb = new AlertDialog.Builder(this);

              adb.setTitle(R.string.items);
              adb.setSingleChoiceItems(data, -1, myClickListener);


          }


          OnClickListener myClickListener = new OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
              ListView lv = ((AlertDialog) dialog).getListView();
              if (which == Dialog.BUTTON_POSITIVE)
                Log.d(LOG_TAG, "pos = " + lv.getCheckedItemPosition());
              else
                Log.d(LOG_TAG, "which = " + which);
            }
          };

Eclipse 注意两个错误:

1) setSingleChoiceItems(int, int, DialogInterface.OnClickListener) 在 类型 AlertDialog.Builder 不适用于参数 (字符串[],整数, View.OnClickListener) MainActivity.java /master/src/com/example/hotdog_master 行 98 Java问题

2) View.OnClickListener(){} 必须实现继承的抽象方法 View.OnClickListener.onClick(View) MainActivity.java /master/src/com/example/hotdog_master 行 104 Java问题

您能帮忙了解一下哪里出了问题吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    将您的 OnClickListener 更改为:

      DialogInterface.OnClickListener myClickListener = new 
                                       DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                  ListView lv = ((AlertDialog) dialog).getListView();
                  if (which == Dialog.BUTTON_POSITIVE)
                    Log.d(LOG_TAG, "pos = " + lv.getCheckedItemPosition());
                  else
                    Log.d(LOG_TAG, "which = " + which);
                }
              };
    

    并创建AlertDialog.Builder 实例为:

    AlertDialog.Builder adb = new AlertDialog.Builder(Your_Current_Activity.this);
    

    编辑:

    将您的 onCreateDialog 方法更改为:

    protected Dialog onCreateDialog(int id) {
        AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
    
          adb.setTitle(R.string.items);
          adb.setSingleChoiceItems(data, -1, myClickListener);
    
           AlertDialog dialog = builder.create();
           dialog.show();
          return super.onCreateDialog(id);  //<<<< add return here
    
      }
    

    【讨论】:

    • 然后我有错误,此方法必须返回类型为 Dialog MainActivity.java 第 94 行 Java Problem protected Dialog onCreateDialog(int id) { AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this ); adb.setTitle(R.string.items); adb.setSingleChoiceItems(数据,-1,myClickListener); }
    • :然后出现错误:返回类型与Activity.onCreateDialog(int)不兼容MainActivity.java /master/src/com/example/hotdog_master 第94行Java问题
    • @user1884872 :只需放 `AlertDialog dialog = builder.create(); dialog.show();` 在 return 之前。目前您无法看到对话框,因为您没有为 Dialog 创建调用 Create() 和 show() 方法
    【解决方案2】:

    将上面的代码更改如下:

    DialogInterface.OnClickListener myClickListener = new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                  ListView lv = ((AlertDialog) dialog).getListView();
                  if (which == Dialog.BUTTON_POSITIVE)
                    Log.d(LOG_TAG, "pos = " + lv.getCheckedItemPosition());
                  else
                    Log.d(LOG_TAG, "which = " + which);
                }
              };
    

    您已经为 Button Click 导入了 View.OnClickListener,并且 eclipse 也将下面的 onClickListener 检测为 View.onClickListener()。所以通过添加 DialogInterface.OnClickListener 来保持差异化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多