如何从Android对话框中存储编辑文本数据? [英] How to store edit text data from an Android dialog?
问题描述
我已经建立了一个包含多个编辑文本的警报对话框,但是我不确定如何存储在警报对话框中输入的值.
I've set up an alert dialog with multiple edit texts but I'm not sure how to store the values being entered in the alert dialog.
通常,我可以按照以下方式做一些事情:
Usually I could just do something along the lines of this:
final EditText input = new EditText(this);
alert.setView(input);
Editable value = input.getText();
但是我的MessageDialog是像这样从SearchResult.java调用的一个单独的类,所以我不知道如何访问MyMessageDialog.java中的编辑文本的实例:
But my MessageDialog is a separate class being called from SearchResult.java like this, so I don't know how to access instances of the edit texts in the MyMessageDialog.java:
MyMessageDialog.displayMessage(SearchResult.this, "Sample Info", "Required");
有人知道如何在此实现中检索编辑文本值吗?
Does anyone know how the edit text values can be retrieved in this implementation?
这是MyMessageDialog类,下面是警报对话框的布局:
This is the MyMessageDialog class and below that the layout for the alert dialog:
public class MyMessageDialog {
@SuppressLint("NewApi")
public static AlertDialog displayMessage(Context context, String title, String message){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
LayoutInflater inflater = LayoutInflater.from(context);
builder.setTitle(title);
builder.setMessage(message);
builder.setView(inflater.inflate(R.layout.custom_view, null));
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
return builder.create();
}
}
警报对话框布局,custom_view:
Alert Dialog Layout, custom_view:
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="ship name"
android:id="@+id/shipNameEditText" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="analyst name"
android:id="@+id/scientistEditText2" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="email address"
android:id="@+id/emailEditText3"
android:layout_gravity="center_horizontal" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="sample volume"
android:id="@+id/volumeEditText4" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="sample colour"
android:id="@+id/colourEditText4" />
</LinearLayout>
推荐答案
向MyMessageDialog类添加接口以将值传回:
Add an interface to your MyMessageDialog class to pass the values back:
public interface MyMessageDialogListener {
public void onClosed(String ship, String scientist, String email, String volume, String color);
}
在创建对话框布局时存储它,并提取EditText值,并通过OK按钮onClick内的侦听器将它们传递回去:
Store the dialog layout when you create it and extract the EditText values and pass them back via the listener inside the OK button onClick:
public class MyMessageDialog {
public interface MyMessageDialogListener {
public void onClosed(String ship, String scientist, String email, String volume, String color);
}
@SuppressLint("NewApi")
public static AlertDialog displayMessage(Context context, String title, String message, final MyMessageDialogListener listener){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
LayoutInflater inflater = LayoutInflater.from(context);
builder.setTitle(title);
builder.setMessage(message);
final View layoutView = inflater.inflate(R.layout.custom_view, null);
builder.setView(layoutView);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// get the edit text values here and pass them back via the listener
if(listener != null)
{
EditText text1 = (EditText)layoutView.findViewById(R.id.shipNameEditText);
EditText text2 = (EditText)layoutView.findViewById(R.id.scientistEditText2);
EditText text3 = (EditText)layoutView.findViewById(R.id.emailEditText3);
EditText text4 = (EditText)layoutView.findViewById(R.id.volumeEditText4);
EditText text5 = (EditText)layoutView.findViewById(R.id.colourEditText4);
listener.onClosed(text1.getText().toString(),
text2.getText().toString(),
text3.getText().toString(),
text4.getText().toString(),
text5.getText().toString());
}
dialog.cancel();
}
});
builder.show();
return builder.create();
}
}
在调用对话框时创建侦听器的实例,并使用它来接收字符串:
Create an instance of the listener when you call the dialog and use it to receive the strings:
MyMessageDialog.displayMessage(SearchResult.this, "Sample Info", "Required",
new MyMessageDialog.MyMessageDialogListener() {
public void onClosed(String ship, String scientist, String email, String volume, String color)
{
// store / use the values here
}
});
这篇关于如何从Android对话框中存储编辑文本数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!