我有问题。 我创建了使用我自己的布局创建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>
答案 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();
}
});
}