4

リスト内の項目 (行) が無効になっている複数選択の警告ダイアログを表示することはできますか? リストの「なし」オプションをチェックすると、オプション「なし」を除くリストのすべてのオプションが無効になります。オプション「なし」のチェックを外すと、すべての項目をもう一度有効にする必要がありますか?

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setMultiChoiceItems(optionsList,selectionState,new
                                       DialogInterface.OnMultiChoiceListener()
    {

      @Override
      public void onClick(DialogInterface dialog,int which, boolean isChecked){

      final AlertDialog alertDialog = (AlertDialog) dialog;
      final ListView alertDialogList = alertDialog.getListView();

        // Here how to make the items in the list as disabled when None is clicked
        // None OPtion is one among  in optionsList string array

         // A loop to disable all items other than clicked one 
         for (int position = alertDialogList.getCheckedItemPosition(); position<
                                alertDialogList.getChildCount; position++)
         {
                alertDialogList.getChildAt(position).setEnabled(false);
         }

      }
    });        
4

3 に答える 3

4

あなたOnMultiChoiceClickListenerはもうすぐです。2 つの問題forがあります。1 つ目は、クリックされた子以外のすべての子に対してループが繰り返されていないことです。

     // A loop to disable all items other than clicked one 
     for (int position = alertDialogList.getCheckedItemPosition(); position<
                            alertDialogList.getChildCount; position++)
     {
            alertDialogList.getChildAt(position).setEnabled(false);
     }

クリックしたものから始めて、それを無効にし、その後のすべての子をリストの最後まで無効にします。クリックした子より厳密に前の子のみが無効になりません。2 つ目の問題は、無効化コードが「なし」アイテムだけでなく、クリックされたすべてのアイテムに対して実行されることです。代わりにこのようなことを試してください。which特別な「なし」項目が押されたかどうかを識別するために使用しています。

private static final int specialItem = ...;
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    if (which == singleItem) { // only if they clicked 'none'
        final AlertDialog alertDialog = (AlertDialog) dialog;
        final ListView alertDialogList = alertDialog.getListView();

        for (int position = 0; position < alertDialogList.getChildCount(); position++)
        {
            if (position != which) {
                alertDialogList.getChildAt(position).setEnabled(!isChecked);
            }
        }
    }
}

which0 でない場合は何もしないことに注意してください。項目 0 を回避するためにループを 1 から開始し、「なし」項目がチェックされていないfor場合はすべての要素を有効に設定し、項目チェックされませんでした。

最後に、これは複数選択ダイアログの通常の動作ではないことに注意してください。ユーザーは、'none' オプションの動作に驚かれることでしょう。これは、他のすべてのオプションとは異なるためです。「なし」オプションを持たない方がより一般的です。ユーザーが他のオプションをチェックしない場合、それはなしを意味します。本当に「なし」オプションが必要な場合は、ユーザーが明示的に「なし」を選択した場合と、単に応答しない場合との違いを示すために、チェックボックスのグループの外側に別の「なし」ボタンまたはラジオ ボタンがあるカスタム レイアウトを使用することを検討してください。そのため、ユーザーは動作が異なることがわかります。

于 2012-10-18T10:22:27.590 に答える
0
AlertDialog alertDialog  = new AlertDialog.Builder(context).create();   
            alertDialog.setTitle("Warning!");
            alertDialog.setMessage("Confirm closing activity without succes?");
            alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {


                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    UpdateWebActivityState(ActivitiesEditActivity.this, serviceActivity.ActivityId,serviceActivity.WebActivityState , notes, sigBitmap);
                    isSuccessfullyClosed = false;
                    AlertDialog alert  = new AlertDialog.Builder(context).create(); 
                    alert.setTitle("Warning!");
                    alert.setMessage("Activity closed successfully");
                    alert.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub

                            do what you want here
                            finish();                   
                        }

                    });

                    alert.show();

                }
            });

            alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which)
                {
                        return;
                }
                });

            alertDialog.show();
于 2012-10-18T06:28:23.880 に答える
-1

はい、それは本当です

            new AlertDialog.Builder(Main.this)
            .setIcon(R.drawable.icon)
            .setTitle("Title")
            .setView(textEntryView)
            .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    //android.os.Debug.waitForDebugger();


                    /* User clicked OK so do some stuff */ 
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked cancel so do some stuff */
                }
            })
            .setNeutralButton("Delete", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                }
            })
            .create();
于 2012-10-18T05:19:43.277 に答える