2017-08-07 106 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界面 –