在Activity中实现多个警报对话框的最佳方法

Rac*_*hra 5 android android-fragments android-alertdialog

  • 我有一个Activity3 Fragments,现在每个片段有2 ToggleButtons(总共六个按钮).

  • AlertDialog在每次按钮点击时向用户显示An .

  • 每个按钮执行一些不同的操作,因此警报对话框的布局/视图彼此不同,因此对话框的正按钮单击也不同,而负按钮单击几乎相同.

我已经在Activity中的onButtonPressed方法中实现了逻辑

onButtonPressed(View v){

    switch(v.getId()){
    case R.id.button1:
        // create and show an AlertDialog
    break;
    }
    case R.id.button2:
        // create and show an AlertDialog
    break;
    }
    case R.id.button3:
        // create and show an AlertDialog
    break;
    }
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

这导致了许多重复的代码行,这不是AFAIK最好的东西.我愿意知道我是否应该保持当前的实现,或者创建一个包装类来创建和显示AlertDialogs.

Lui*_*ena 10

您可以创建一个类然后扩展DialogFragment类然后重写其OnCreateDialog()方法,然后创建一个静态方法来创建实例并传递参数.

OnCreateDialog

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
    //set title,message or view ....

    // when you done
    return dialog.create();
}
Run Code Online (Sandbox Code Playgroud)

放置参数的静态方法(静态工厂模式设计)

public static CustomAlertDialog newInstance(String title,String message) {
CustomAlertDialog customAD = new CustomAlertDialog();
Bundle args = new Bundle();
args.putString("title", title);
args.putString("message", message);
customAD.setArguments(args);
return customAD;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它

DialogFragment dialog = CustomAlertDialog.newInstance("titulo","message");
dialog.show(/* etc.. */ );
Run Code Online (Sandbox Code Playgroud)


Ego*_*gor 2

创建AlertDialogs 的现代方法实际上是将它们包装在DialogFragments 内,因此您需要创建一个扩展 的类DialogFragment,重写其方法并从中onCreateDialog()返回 的实例。AlertDialog为了自定义对话框,您可以按照newInstance()讨论中的描述添加一个方法,并将自定义参数传递给您的类。DialogFragment