2013-01-03 36 views
1

我试图展示一个DialogFragment询问用户他的名字,我需要找回这个字符串到我的主要活动。DialogFragments和活动,传递信息

我已经创建了以下在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

嗯,我自己解决(但不知道这是否是更好的办法)

我在我的onCreateDialog做了一些改变。

  1. 保存在变量中视图:

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

  2. 保存的EditText在一个变量:

    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(); 
} 
+0

感谢,该解决方案是有意义的,并且效果很好。 – henry000