0

チェックボックス付きのダイアログの例を見つけました:

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);
            }
          };

2つのエラーに関するEclipseの注意:

1)AlertDialog.Builder型のsetSingleChoiceItems(int、int、DialogInterface.OnClickListener)は、引数(String []、int、View.OnClickListener)に適用できません。MainActivity.java/ master / src / com / example / hotdog_master line 98 Javaの問題

2)View.OnClickListener(){}は、継承された抽象メソッドView.OnClickListener.onClick(View)MainActivity.java / master / src / com / example / hotdog_master line104Java問題を実装する必要があります

何が悪いのか理解するのを手伝ってもらえますか?

4

2 に答える 2

1

上記のコードを以下のように変更します。

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);
            }
          };

ボタンクリック用のView.OnClickListenerを既にインポートしており、eclipseは以下のonClickListenerをView.onClickListener()としても検出しています。したがって、DialogInterface.OnClickListenerを追加して差別化を維持します

于 2013-01-02T12:40:27.057 に答える
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

  }
于 2013-01-02T12:41:09.287 に答える