2017-08-07 104 views
0

我創建一個自定義AlertDialog來得到這樣的項目清單...安卓:聽PositiveButton單擊自定義DialogFragment

對話片段:

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

如何在點擊確定後檢索選定的項目?我嘗試添加接口和抽象函數,但無法正常工作。

+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界面 –