将数据从对话框传递到Android

时间:2016-04-25 10:34:29

标签: java android dialog

我有问题。 我创建了使用我自己的布局创建Dialog的方法。而且我不知道如何从我的EdiText传递值(字符串)并将其作为我的Activity中的任何变量。 在评论中,您可以看到我是如何解决这个问题的。

Java方法

public void makeDialog(){
        // custom dialog
        final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.dialog_ip);
        dialog.setTitle("IP connection");

// Todo passing value from dialog to activity
//        final EditText ipValueConnection = (EditText)findViewById(R.id.ipValueConnection);
//        ipValueConnection.setOnClickListener(this);
//        EditText portValueConnection = (EditText)findViewById(R.id.portValueConnection);
//        Toast.makeText(context, ipValueConnection.getText().toString(), Toast.LENGTH_LONG).show();

        Button dialogButtonLogin = (Button) dialog.findViewById(R.id.dialogButtonLogin);
        // if button is clicked, close the custom dialog
        dialogButtonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                tryToConnect();
                dialog.dismiss();

            }
        });




        // set the custom dialog components - text, image and button
//        TextView text = (TextView) dialog.findViewById(R.id.IP);

        dialog.show();

    }

XML布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:src="@drawable/antena"
        android:layout_width="220dp"
        android:layout_height="120dp"
        android:scaleType="centerInside"
        android:background="#FFFFBB33"
        android:contentDescription="@string/app_name"
        android:adjustViewBounds="true"

        />
    <EditText
        android:id="@+id/ipValueConnection"
        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="IP" />
    <EditText
        android:id="@+id/portValueConnection"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="16dp"
        android:fontFamily="sans-serif"
        android:hint="PORT"/>
    <Button
        android:id="@+id/dialogButtonLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Login"
        android:layout_marginTop="5dp"
        />
</LinearLayout>

3 个答案:

答案 0 :(得分:1)

您获得的错误意味着在当前布局文件中找不到对editText的引用。您已在自定义对话框视图中找到EditText而不是活动视图。

所以而不是:

 final EditText ipValueConnection =(EditText)findViewById(R.id.ipValueConnection);

使用:

 final EditText ipValueConnection =(EditText)dialog.findViewById(R.id.ipValueConnection);

答案 1 :(得分:0)

如果我理解你的问题, 您的编辑文本位于dialog_ip中,因此您需要使用

final EditText ipValueConnection = (EditText) dialog.findViewById(R.id.ipValueConnection);

然后您可以从编辑文本中获取文本

String text= ipValueConnection.getText().toString;

在您的活动中使用该变量。

答案 2 :(得分:0)

创建界面

public interface OnClickInterface {

    public void onClick();
}

调用它在你的活动onCreate()

中实例化它
 OnClickInterface onClickInterface = new OnClickInterface() {
            @Override
            public void onClick() {
               //Call Method from here
                requiredMethod();
            }
        };

//在对话框类或方法

public void makeDialog(OnClickInterface onClickInterface){
//Your code

 dialogButtonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

             onClickInterface.onClick();


                dialog.dismiss();

            }
        });
}