2016-06-30 1 views
0

とAlertDialogで一つの項目を無効にする方法は、私は次のコードでダイアログを作成します。アンドロイド:MultiChoiceItems

final CharSequence[] items  = {" One ", " Two ", " Three "}; 

AlertDialog dialog = new AlertDialog.Builder(this) 
      .setTitle("Title1") 
      .setMultiChoiceItems(items, null, null) 
      .setPositiveButton("CLOSE", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        Log.e("1k", "count : " + ((AlertDialog) dialog).getListView().getChildCount()); 

       } 
      }).show(); 
    ListView lw = dialog.getListView(); 
    //lw.getChildAt(0).setEnabled(false); 
    Log.e("1k", "count : " + lw.getChildCount()); 

これは、ダイアログボックスを作成します。 "CLOSE"ボタンをクリックすると、ログに "3"の出力が表示されます。 これまでのところ、とても良い "items"配列には3つの文字列があります。

"show()"の後にが呼び出される最後のコード行は、ログに「0」と表示されます。

私は何をしたいことリストの最初の項目を無効にすることが、「getChildAt(0)」はnullを返しますので、このコードは、NullPointerExceptionがスローされます。

dialog.getListView().getChildAt(0).setEnabled(false); 

私は最初の項目を無効にするにはどうすればよいですダイアログのリスト?

(とその理由のgetChildCountは(ない)..

...ショーの後に呼び出されたとき)(0の代わりに、3を返す?

.. PositiveButtonのonclickのに予想通り3を返す?)

+0

代わりに '' setAdapter' ...あなたのアダプタ実装のオーバーライドで 'ListAdapter'インタフェースを使用setMultiChoiceItems'私はこれを試してみました – Selvin

+0

...が、 android.Routout.select_dialog_multichoiceをレイアウトとして使用しても、ルックアンドフィールはネイティブではありませんでした(これは重要なものではありません。ビューはあまりにも大きかった。 Lollipopで使用されているレイアウトが正しければ、それは順方向互換性がありません) – MehmetGunacti

答えて

0

コードが役立ちます以下の場合を参照してください:

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
      MainActivity.this, 
      android.R.layout.select_dialog_singlechoice); 
    arrayAdapter.add("One"); 
    arrayAdapter.add("Two"); 
    arrayAdapter.add("Three"); 


AlertDialog dialog = new AlertDialog.Builder(this) 
     .setTitle("Title1") 
     .setPositiveButton("CLOSE", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
      } 
     }).show(); 

dialog.setAdapter(
      arrayAdapter, 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int position) { 
        // no event on first position 
        if (position!= 0) { 
        } 
       } 
      }); 
+0

しかし、このようにitem1を有効にしておくと、リストの最初の項目を無効にする必要があります。それを変更することはできません。 – MehmetGunacti