以下是我需要从EditText
AlertDialog
获取文字的方法
public void checkButton() {
leggspillere = (Button) findViewById(R.id.leggspillere);
final LayoutInflater inflater = this.getLayoutInflater();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(inflater.inflate(R.layout.create_user,null));
builder.setMessage("Lag en spiller");
builder.setCancelable(true);
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// trying to get the EditText-string inside alertdialogbox input here.
final String Name = UserName.
Person person = new Person(Name, 0);
dialog.dismiss();
spillere.setText(person.getName() + " " + person.getScore());
}
}
);
//sette andre knappen "cancel"
builder.setNegativeButton("no",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}
);
AlertDialog alert = builder.create();
alert.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:layout_width="match_parent"
android:layout_height="64dp"
android:scaleType="center"
android:background="#FFFFBB33"
android:contentDescription="@string/app_name" />
<EditText
android:id="@+id/UserName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginTop="16dp"
android:inputType="textEmailAddress" />
</LinearLayout>
尝试从EditText.xml
获取输入/字符串以生成person
对象。
始终引用null
对象。我无法找到任何解决方案,请指点我。
答案 0 :(得分:2)
您是如何尝试访问DialogInterface.OnClickListener
内的editText的?
尝试在View对象中获取膨胀的视图,并在该View对象变量上执行findViewById。下面的代码应该可以正常工作:
LayoutInflater inflater = this.getLayoutInflater();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final View dialogView = inflater.inflate(R.layout.dialog_alert, null);
builder.setView(dialogView);
builder.setMessage("Lag en spiller");
builder.setCancelable(true);
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
EditText editText = (EditText) dialogView.findViewById(R.id.d_alert_et);
Log.v("tag", "Edit text value: " + editText.getText());
}
});
builder.setNegativeButton("no",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
基本上在视图对象中获取膨胀的视图:
最终查看dialogView = inflater.inflate(R.layout.dialog_alert,null);
然后在该View对象上执行findViewById:
EditText editText =(EditText)dialogView.findViewById(R.id.d_alert_et);
<强> editText.getText()强>
答案 1 :(得分:0)
PLS。请参阅此代码:https://www.mkyong.com/android/android-custom-dialog-example/
// custom dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
dialog.setTitle("Title...");
// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
**EditText edtName = (EditText) dialog.findViewById(R.id.edtName);**
image.setImageResource(R.drawable.ic_launcher);
Button dialogButton = (Button)
dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
**String s = edtName.getText().toString();**
dialog.dismiss();
}
});
dialog.show();
}
答案 2 :(得分:0)
我更喜欢使用Material Dialog库,因为它非常易于使用。
您可以使用自定义视图或使用simple input
1.来自我的项目的简单输入示例:
new MaterialDialog.Builder(this)
.title(R.string.input)
.content(R.string.input_content)
.inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
.input(R.string.input_hint, R.string.input_prefill, new MaterialDialog.InputCallback() {
@Override
public void onInput(MaterialDialog dialog, CharSequence input) {
// Do something
}
}).show();
2.自定义视图示例:
View view = LayoutInflater.from(context).inflate(R.layout.dialog_new_queue, null, false);
MaterialDialog dialog = new MaterialDialog.Builder(context)
.customView(view, false).build();
AutoCompleteTextView tv = view.findViewById(R.id.dialog_add_q_tv);
Button btn = view.findViewById(R.id.dialog_add_queue_btn);
btn.setOnClickListener(v -> {
String input = tv.getText().toString().trim();
Observable
.create(emitter -> {
if (input.isEmpty()) {
emitter.onError(new IllegalArgumentException("اسم صف خالی است"));
} else if (dao.getQueue(pref.getLastUsername(), input) != null) {
emitter.onError(new IllegalArgumentException("این اسم تکراری است!"));
} else {
QueueModel q = new QueueModel(input, pref.getLastUsername(), System.currentTimeMillis());
dao.insert(q);
emitter.onComplete();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(o -> {},e ->{
tv.setError(e.getMessage());
tv.requestFocus();
},() -> {
Toast.makeText(context, "صف جدید ساخته شد", Toast.LENGTH_SHORT).show();
dialog.dismiss();
loadData();
});
});
dialog.show();
答案 3 :(得分:0)
替换2行:
final String Name = UserName.
Person person = new Person(Name, 0);
通过
EditText editText = (EditText) dialogView.findViewById(R.id.UserName);
Person person = new Person(editText.getText(), 0);
答案 4 :(得分:0)
试试这个
public void checkButton() {
leggspillere = (Button) findViewById(R.id.leggspillere);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.create_user, null));
builder.setMessage("Lag en spiller");
builder.setCancelable(true);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Change here
Dialog myDialog = (Dialog) dialog;
EditText editText = (EditText) myDialog.findViewById(R.id.UserName);
Person person = new Person(editText.getText(), 0);
}
})
//sette andre knappen "cancel"
builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.create().show();
}