DialogFragment实例 - 分配不同的操作

时间:2014-12-25 08:21:50

标签: android android-dialogfragment

我有很多问题需要了解DialoFragment的工作原理。

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

我尝试使用DIalogFragment而不是编写相同的代码行6次。到目前为止,我已经达到了可以成功显示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
    }
}

2 个答案:

答案 0 :(得分: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");
}

在DIalog片段中:

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());
                }
            }
        });

答案 1 :(得分: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
    }
}