1

ユーザーに名前を尋ねているところを表示しようとしてDialogFragmentいますが、この文字列をメインのアクティビティに戻す必要があります。

Android ガイドに従ってカスタム ダイアログ フラグメントを作成しました: http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout

私のコードでは、ユーザーが肯定的なボタンをクリックしたことに応じて、メイン アクティビティで関数を呼び出すことができます。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.textdialog, null)).setPositiveButton("OK", new DialogInterface.OnClickListener(){
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   ((mainActivity)getActivity()).doPositiveClick();
               }
           }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   ((mainActivity)getActivity()).doNegativeClick();
               }
           });      
    return builder.create();
}

R.layout.textdialog は次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<EditText
        android:id="@+id/textdraw"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp"
        android:hint="introduce text" />

</LinearLayout>

私の質問は、どうすればユーザーがダイアログ フラグメントに書いたテキストを取得し、それをメイン アクティビティに送り返すことができるかということです。

ありがとう!

4

1 に答える 1

4

まあ、私は自分自身を解決しました(しかしそれがより良い方法であるかどうかはわかりません)

にいくつかの変更を加えましたonCreateDialog

  1. ビューを変数に保存します。

    View v= inflater.inflate(R.layout.textdialog, null);

  2. エディットテキストを変数に保存します。

    final EditText ed=(EditText)v.findViewById(R.id.textdraw);

  3. ユーザーがポジティブボタンをクリックすると、edittext変数の値が返されます。

    getActivity()).doPositiveClick(ed.getText().toString());

完全なコードはここにあります:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog layout
    View v= inflater.inflate(R.layout.textdialog, null);
    // reference to the edittext
    final EditText ed= (EditText)v.findViewById(R.id.textdraw);


    builder.setView(v).setPositiveButton("OK", new DialogInterface.OnClickListener(){
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   ((mainActivity)getActivity()).doPositiveClick(ed.getText().toString());
               }
           }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   ((mainActivity)getActivity()).doNegativeClick();
               }
           });      
    return builder.create();
}

およびメインアクティビティのコード:

public void doPositiveClick(String ed){
    Toast.makeText(this, "Hi, "+ed, Toast.LENGTH_SHORT).show();
}
于 2013-01-03T11:03:59.723 に答える