5

DialogFragment から派生したカスタム ダイアログがあります。

ユーザーが [OK] ボタンをクリックすると、画面に表示されている情報を保存する必要があります。

そこで、PositiveButton 呼び出しを却下し、onDismiss メソッドを実装してデータを保存しました。

onDismiss メソッドでは、ダイアログ上にある 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 で膨らませたビューを属性として保存できることはわかっていますが、それは私には正しくないようです。

onDismiss で画面からビューを取得する正しい方法は?

Ps: 私が働いている場所では、コードを投稿することが許可されていないため、Google からコードを取得し、コードにできるだけ近づけるように変更しました。

4

2 に答える 2

3

古いけどゴールド。これにより、フラグメント全体をより細かく制御できます (たとえば、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();
}

OnCreateDialog で膨らませたビューを属性として保存できることはわかっていますが、それは私には正しくないようです。

ええ、それです。ただし、特に seekBar などを実装している場合や、ButterKnife などのライブラリを使用している場合は、正しいように見えます。

于 2015-10-24T13:04:10.747 に答える