2016-06-27 13 views
0

複数のリスト選択リスナーが含まれているアラートダイアログがあります。問題は、複数のアイテムを選択した後に最初のダイアログを開くときに、ポジティブボタンを押してから、開いたアラートダイアログで最後に開いたアイテムを選択したものが何も選択されていないことを示します。毎回このコードインは、それに提供される新しいAlertDialogが(ライン2)とis_checkedの新しい配列を構築されている起動のでAlertDialogを開いたときにポジティブボタンで選択した項目をリストに表示

final CharSequence[] dialogList= list.toArray(new CharSequence[list.size()]); 
    final AlertDialog.Builder builderDialog = new AlertDialog.Builder(SchoolFieldsData.this); 
    builderDialog.setTitle("Enter Average Fee"); 
    int count = dialogList.length; 
    boolean[] is_checked = new boolean[count]; // set is_checked boolean false; 

    // Creating multiple selection by using setMutliChoiceItem method 
    builderDialog.setMultiChoiceItems(dialogList, is_checked, 
      new DialogInterface.OnMultiChoiceClickListener() { 
       public void onClick(DialogInterface dialog, 
            int whichButton, boolean isChecked) { 
       } 
      }); 

    builderDialog.setPositiveButton("OK", 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 

        ListView list = ((AlertDialog) dialog).getListView(); 
        // make selected item in the comma seprated string 
        StringBuilder stringBuilder = new StringBuilder(); 
        for (int i = 0; i < list.getCount(); i++) { 
         boolean checked = list.isItemChecked(i); 

         if (checked) { 
          if (stringBuilder.length() > 0) stringBuilder.append(","); 
          stringBuilder.append(list.getItemAtPosition(i)); 

         } 
        } 

        /*Check string builder is empty or not. If string builder is not empty. 
         It will display on the screen. 
        */ 
        if (stringBuilder.toString().trim().equals("")) { 

        //  ((TextView) findViewById(R.id.text)).setText("Click here to open Dialog"); 
         stringBuilder.setLength(0); 

        } else { 

        //  ((TextView) findViewById(R.id.text)).setText(stringBuilder); 
        } 
       } 
      }); 

    builderDialog.setNegativeButton("Cancel", 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       // ((TextView) findViewById(R.id.text)).setText("Click here to open Dialog"); 
       } 
      }); 
    AlertDialog alert = builderDialog.create(); 
    alert.show(); 

答えて

1

です。

is_checkedアレイを別の場所に保存し、ポジティブボタンハンドラの内部に(boolean checked = list.isItemChecked(i);の代わりに)この配列に状態を保存するなど、状態を復元しようとします。

+0

次に、項目を設定する方法を確認します。ダイアログが再び表示されたら? –

+0

あなたはこのような行を持っています: 'boolean [] is_checked = new boolean [count];'。代わりに、 'boolean [] is_checked = old_answers'と書いて、以前にチェックされたボタンを参照します。 –

+0

私は状態を保存しました。あなたの答えに今私はチェックマークが入っている配列を持っているマーク。リストの表示時に値を設定する方法は? –

関連する問題