我有很多问题需要了解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
}
}
答案 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
}
}