2014-12-25 27 views
0

我有很多理解DialoFragment如何工作的问题。DialogFragment实例 - 分配不同的动作

当我点击6个不同的动作按钮时,我需要在我的片段中生成6个类似结构的AlertDialog。唯一的问题是,Dialog的PositiveButton onClick事件在每种情况下都会有所不同(基于哪个操作按钮被点击)。

而不是写6次相同的代码行,我试图使用DIalogFragment。到目前为止,我已经到了可以成功显示6种不同警报的程度,但仍然无法为他们分配不同的任务。任何帮助将不胜感激。

public class AlertDialogSingleField extends DialogFragment{ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Bundle args = getArguments(); 
     String title = args.getString("title"); 
     AlertDialog.Builder myDialog = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.single_field_alert, null); 
     myDialog.setView(layout); 
     myDialog.setTitle(title); 

     myDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //ACTIONS HERE WILL BE DIFFERENT DEPENDING ON WHICH METHOD WAS CALLED TO CREATE THIS DIALOG 
      } 
     }); 
     return myDialog.create(); 
    } 

    public Interface testActions{ 
     public void ActionForalert1(); 
     public void ActionForalert2(); 
    } 
} 

public class ImportExportFragment extends Fragment implements testActions{ 
    public void alert1(){ 
     DialogFragment alertdialog = new AlertDialogSingleField(); 
     Bundle args = new Bundle(); 
     args.putString("title", "Title1"); 
     alertdialog.setArguments(args); 
     alertdialog.show(getFragmentManager(), "alert1"); 
    } 

    public void alert2(){ 
     DialogFragment alertdialog = new AlertDialogSingleField(); 
     Bundle args = new Bundle(); 
     args.putString("title", "Title2"); 
     alertdialog.setArguments(args); 
     alertdialog.show(getFragmentManager(), "alert2"); 
    } 

    public void ActionForalert1(){ 
     //THINGS TO DO WHEN AlertDialog created through alert1 method 
    } 

    public void ActionForalert2(){ 
     //THINGS TO DO WHEN AlertDialog created through alert2 method 
    } 
} 

回答

0

我刚找到一个方法。只是张贴参考。原代码(有问题)中的2个函数的改变应该能够实现。

在主要片段:

public void alert1(){ 
     DialogFragment alertdialog = new AlertDialogSingleField(); 
     Bundle args = new Bundle(); 
     args.putString("title", "Title1"); 
     alertdialog.setArguments(args); 
     alertdialog.setTargetFragment(this,0); **//ADD THIS LINE** 
     alertdialog.show(getFragmentManager(), "alert1"); 
} 

对话框片段:

myDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Fragment ft = getTargetFragment(); 
       if(ft != null){ 
        ((eximaction) ft).importFromInternalMemory(et.getText().toString()); 
       } 
      } 
     }); 
0

只需使用对话框正按钮侦听作为实例变量

public class AlertDialogSingleField extends DialogFragment{ 

    DialogInterface.OnClickListener positiveListener; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Bundle args = getArguments(); 
     String title = args.getString("title"); 
     AlertDialog.Builder myDialog = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View layout = inflater.inflate(R.layout.single_field_alert, null); 
     myDialog.setView(layout); 
     myDialog.setTitle(title); 
     myDialog.setPositiveButton("OK", positiveListener); 
     return myDialog.create(); 
    } 

    public void setPositiveListener(DialogInterface.OnClickListener positiveListener){ 
     this.positiveListener = positiveListener; 
    } 

    public Interface testActions{ 
     public void ActionForalert1(); 
     public void ActionForalert2(); 
    } 


} 

public class ImportExportFragment extends Fragment implements testActions{ 

    public void alert1(){ 
     DialogFragment alertdialog = new AlertDialogSingleField(); 
     alertdialog.setPositiveListener(new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         ActionForalert1(); 
        } 
       }); 
     Bundle args = new Bundle(); 
     args.putString("title", "Title1"); 
     alertdialog.setArguments(args); 
     alertdialog.show(getFragmentManager(), "alert1"); 
    } 

    public void alert2(){ 
     DialogFragment alertdialog = new AlertDialogSingleField(); 
      alertdialog.setPositiveListener(new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         ActionForalert2(); 
        } 
       }); 
     Bundle args = new Bundle(); 
     args.putString("title", "Title2"); 
     alertdialog.setArguments(args); 
     alertdialog.show(getFragmentManager(), "alert2"); 
    } 

    public void ActionForalert1(){ 
     //THINGS TO DO WHEN AlertDialog created through alert1 method 
    } 

    public void ActionForalert2(){ 
     //THINGS TO DO WHEN AlertDialog created through alert2 method 
    } 
} 
相关问题