2

カスタムダイアログに頭を悩ませているようには見えません。私は多くのバリエーションを試しましたが、今のところうまくいきません。

これは、ダイアログの現在の xml です。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/edit_name"
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content"
              android:layout_gravity="center" 
              android:orientation="vertical"  >

    <TextView
            android:id="@+id/Word"
            android:text="Word?"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center_vertical"/>

    <EditText
            android:layout_height="100dp"
            android:layout_width="match_parent"
            android:id="@+id/lookupWordEdit"
            android:inputType="text"/>
</RelativeLayout>

コードは次のとおりです。

public class LookupWordDialogFragment extends DialogFragment {
    private EditText mEditText;

    public LookupWordDialogFragment() {
        // Empty constructor required for DialogFragment
    }

    public interface LookupWordDialogListener {
        void onFinishEditDialog(String inputText);
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();
        final EditText lookupWordEdit = (EditText)getActivity().findViewById(R.id.lookupWordEdit);

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(inflater.inflate(R.layout.dialog_lookupword, null))
                // Add action buttons
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                // Return input text to activity

                LayoutInflater inflater = getActivity().getLayoutInflater();
                final EditText lookupWordEdit = (EditText)getActivity().findViewById(R.id.lookupWordEdit);

                LookupWordDialogListener activity = (LookupWordDialogListener) getActivity();
                activity.onFinishEditDialog(lookupWordEdit.getText().toString());
            }
        })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        LookupWordDialogFragment.this.getDialog().cancel();
                    }
                });
        return builder.create();
    }
}

コードは現在、次の行でヌル ポインター例外でクラッシュします。

activity.onFinishEditDialog(lookupWordEdit.getText().toString());

私は、lookupWordEdit を正しく取得していないと思われます。ダイアログはとてもシンプルです。ユーザーが [OK] ボタンをタップしたときに、入力したテキストを取得するにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

0

lookupWordEditEditText はレイアウトではなく AlertDialog Layout 内にあるため、AlertDialog レイアウトから EditText にアクセスするにはDialogFragment、渡すのと同じ View インスタンスを使用する必要があります。setViewAlertDialog

LayoutInflater inflater = LayoutInflater.from(getActivity());
View dialogview = inflater.inflate(R.layout.dialog_lookupword, null);
// now pass dialogview to setView of Dialog
builder.setView(dialogview);
.....

レイアウトdialogviewから EditText を初期化するために次のように使用するようになりました。dialog_lookupword

EditText lookupWordEdit = (EditText)dialogview.findViewById(R.id.lookupWordEdit);
于 2013-05-24T06:22:32.533 に答える