我有一个自DialogFragment派生的自定义对话框。

当用户单击“确定”按钮时,我需要保存屏幕上的信息。

因此,我使我的PositiveButton调用被关闭,并实现了onDismiss方法来保存数据。

在onDismiss方法中,我需要从Dialog上的editView中获取数据。
我正在使用getView()。findViewByID来获取editView,但是方法GetView()返回null。

这是我的代码:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.dialog_signin, null))
           .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   LoginDialogFragment.this.getDialog().dismiss();
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   LoginDialogFragment.this.getDialog().cancel();
               }
           });
    return builder.create();
}

@override
public void onDismiss(){
    EditView view = (EditView)getView().findViewByID(R.id.edit);
}

我知道我可以将在OnCreateDialog中放大的 View 另存为属性,但这对我来说似乎不对。

如何在onDismiss中从屏幕获取 View 的正确方法?

附言:我工作的地方不允许我发布代码,因此我从Google那里获取了一个代码,然后将其更改为与我的代码尽可能接近。

最佳答案

老但黄金。这允许对整个 fragment 进行更大的控制(例如,在实现seekBar或使用ButterKnife时)。说够了:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    View view = inflater.inflate(R.layout.dialog_signin, null);
    // do your stuff with views here

    builder.setView(view)
       .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int id) {
               LoginDialogFragment.this.getDialog().dismiss();
           }
       })
       .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               LoginDialogFragment.this.getDialog().cancel();
           }
       });
    return builder.create();
}



是的,就是那个。虽然它看起来不错,尤其是在实现诸如seekBar之类的东西以及使用诸如ButterKnife之类的库时。

10-06 01:40