2017-08-07 4 views
0

カスタムDialogFragmentにPositiveButtonクリックを聞き、私はこのような項目のリストを取得するには、カスタムAlertDialogを作成しています...アンドロイド:

ダイアログフラグメント:

public class MultiListDialog extends DialogFragment { 
    private ArrayList<Integer> selectedItems = new ArrayList<>(); 

    public MultiListDialog newInstance(Bundle args) { 
     MultiListDialog d = new MultiListDialog(); 
     d.setArguments(args); 
     return d; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     selectedItems = new ArrayList(); 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     builder.setTitle(getArguments().getString("title", "")) 
       .setMultiChoiceItems(getArguments().getCharSequenceArray("list"), null, new DialogInterface.OnMultiChoiceClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
           if (isChecked) { 
            selectedItems.add(which); 
           } else if (selectedItems.contains(which)) { 
            selectedItems.remove(Integer.valueOf(which)); 
           } 
          } 
         }) 
       .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int i) { 

        } 
       }) 
       .setNegativeButton(R.string.cancel_only, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int i) { 
         dialog.cancel(); 
        } 
       }); 

     return builder.create(); 
    } 


    public ArrayList<String> getSelectedItems() { 
     ArrayList<String> ret = new ArrayList<>(); 
     for (int i=0; i<selectedItems.size(); i++) 
      ret.add(getArguments().getCharSequenceArray("list")[i].toString()); 

     return ret; 
    } 
} 

活動:

Bundle args = new Bundle(); 
         args.putString("title", "My Title"); 
         args.putCharSequenceArray("list", arrayList.toArray(new CharSequence[arrayList.size()])); 

         DialogFragment fragment = new MultiListDialog().newInstance(args); 
         fragment.show(getFragmentManager(), "my_frag"); 

OKクリックで選択したアイテムを取得するにはどうすればよいですか?私はインターフェイスと抽象関数を追加しようとしましたが、正しく動作させることができませんでした。

+2

https://guides.codepath.com/android/Using-DialogFragment – USKMobility

答えて

0

DialogFragment#getActivity()メソッドを使用して、リスニングインターフェイスにキャストすることは大丈夫です。また、あなたのアクティビティをリスナとしてダイアログフラグメントに渡し、onDestroy()

+1

あなたのアクティビティにgetActivity()をキャストしても問題ありません。それは悪い練習です – lelloman

+0

私の状況のた​​めの最良の解決策は何でしょうか? –

+0

@lellomanなぜ活動をキャストするのが悪い習慣ですか? https://developer.android.com/reference/android/app/DialogFragment.htmlここでアクティビティはFragmentDialogインターフェイス –