获取 AlertDialog 输入
Get AlertDialog input
我有两个习惯AlertDialog
。 所有工作因为我无法获得用户的输入,我创建了一个名为 MyDialog
的 class 并放置了构造函数。 此外,我想将 getter 与 EditText
放在一起;尽管如此,我还是找不到获取输入的方法。
这里是MyDialog
class:
public class MyDialog {
public static AlertDialog.Builder create(final Context context, final LayoutInflater layoutInflater, final String title, final String content) {
View view = layoutInflater.inflate(R.layout.userdialog, null);
((TextView)view.findViewById(R.id.textViewTitleDialog)).setText(title);
((TextView)view.findViewById(R.id.textViewContentDialog)).setText(content);
((EditText)view.findViewById(R.id.etEmailNuevo)).getText();
return new AlertDialog.Builder(context).setView(view);
}
public String getEmailNuevo(String NewEmail) {
return NewEmail;
}
}
我在 EditText
中创建,而不是 setText()
,我把 getText()
;但是,当时我在我的 Fragment
上使用这个 class。 不知道怎么称呼。我尝试在 Toast
中使用 getText().toString();
;然而,它并没有出现。我做错了什么?
这里是我使用这个 class 的地方:
AlertDialog.Builder myDialog = MyDialog.create(context, getLayoutInflater(savedInstanceState), "Cambio de email", "Introduce nuevo email");
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancelaruserdialog, null)
.show();
编辑 1
我已将代码更改为:
final AlertDialog.Builder myDialog = MyDialog.create(context, getLayoutInflater(savedInstanceState), "Cambio de email", "Introduce nuevo email");
final String pew = MyDialog.getEntry();
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(), pew, Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(R.string.cancelaruserdialog, null)
.show();
我的 class 看起来像:
private static EditText mEditText;
public static AlertDialog.Builder create(final Context context, final LayoutInflater layoutInflater, final String title, final String content) {
View view = layoutInflater.inflate(R.layout.userdialog, null);
((TextView)view.findViewById(R.id.textViewTitleDialog)).setText(title);
((TextView)view.findViewById(R.id.textViewContentDialog)).setText(content);
((EditText)view.findViewById(R.id.etEmailNuevo)).getText();
return new AlertDialog.Builder(context).setView(view);
}
public static String getEntry() {
return mEditText.getText().toString();
}
这是 Logcat 错误:
2927-2927/info.androidhive.slidingmenu E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: info.androidhive.slidingmenu, PID: 2927
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at info.androidhive.slidingmenu.MyDialog.getEntry(MyDialog.java:26)
at info.androidhive.slidingmenu.ConfiguracionFragment.onClick(ConfiguracionFragment.java:45)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
编辑 2
我改变了逻辑,现在,我正在尝试这样做:
我创建了一个 EditText
和一个 String
如下:
EditText mEt;
private String m_Text = "";
这是我发起这个 EditText
的地方:
mEt = (EditText) rootView.findViewById(R.id.etEmailNuevo);
然后,我按如下方式执行 AlertDialog
:
LayoutInflater inflater = getLayoutInflater(savedInstanceState);
View dialoglayout = inflater.inflate(R.layout.userdialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
final EditText input = mEt; //null<--------
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(dialoglayout);
builder.setPositiveButton("Cambiar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
Toast.makeText(getActivity(), m_Text, Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
但是,它仍然给我这个EditText
是空的。 我不知道如何 link 这个 EditText
和来自 userdialog
的 R.id.etEmailNuevo
。
您没有正确使用 getText()
。
如果您想在对话框中获取 EditText 的内容,您应该执行以下操作:
1) 在 MyDialog class 中,为您的 EditText 创建一个成员变量
private EditText mEditText;
将 findViewById(R.id.etEmailNuevo) 行设置为等于。
2) 创建一个获取 EditText 当前内容的方法
public String getEntry() {
return mEditText.getText().toString();
}
3) 然后当您创建对话框时,在 onClick 中调用此方法,一切就绪。
我有两个习惯AlertDialog
。 所有工作因为我无法获得用户的输入,我创建了一个名为 MyDialog
的 class 并放置了构造函数。 此外,我想将 getter 与 EditText
放在一起;尽管如此,我还是找不到获取输入的方法。
这里是MyDialog
class:
public class MyDialog {
public static AlertDialog.Builder create(final Context context, final LayoutInflater layoutInflater, final String title, final String content) {
View view = layoutInflater.inflate(R.layout.userdialog, null);
((TextView)view.findViewById(R.id.textViewTitleDialog)).setText(title);
((TextView)view.findViewById(R.id.textViewContentDialog)).setText(content);
((EditText)view.findViewById(R.id.etEmailNuevo)).getText();
return new AlertDialog.Builder(context).setView(view);
}
public String getEmailNuevo(String NewEmail) {
return NewEmail;
}
}
我在 EditText
中创建,而不是 setText()
,我把 getText()
;但是,当时我在我的 Fragment
上使用这个 class。 不知道怎么称呼。我尝试在 Toast
中使用 getText().toString();
;然而,它并没有出现。我做错了什么?
这里是我使用这个 class 的地方:
AlertDialog.Builder myDialog = MyDialog.create(context, getLayoutInflater(savedInstanceState), "Cambio de email", "Introduce nuevo email");
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancelaruserdialog, null)
.show();
编辑 1
我已将代码更改为:
final AlertDialog.Builder myDialog = MyDialog.create(context, getLayoutInflater(savedInstanceState), "Cambio de email", "Introduce nuevo email");
final String pew = MyDialog.getEntry();
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(), pew, Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(R.string.cancelaruserdialog, null)
.show();
我的 class 看起来像:
private static EditText mEditText;
public static AlertDialog.Builder create(final Context context, final LayoutInflater layoutInflater, final String title, final String content) {
View view = layoutInflater.inflate(R.layout.userdialog, null);
((TextView)view.findViewById(R.id.textViewTitleDialog)).setText(title);
((TextView)view.findViewById(R.id.textViewContentDialog)).setText(content);
((EditText)view.findViewById(R.id.etEmailNuevo)).getText();
return new AlertDialog.Builder(context).setView(view);
}
public static String getEntry() {
return mEditText.getText().toString();
}
这是 Logcat 错误:
2927-2927/info.androidhive.slidingmenu E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: info.androidhive.slidingmenu, PID: 2927
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at info.androidhive.slidingmenu.MyDialog.getEntry(MyDialog.java:26)
at info.androidhive.slidingmenu.ConfiguracionFragment.onClick(ConfiguracionFragment.java:45)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
编辑 2
我改变了逻辑,现在,我正在尝试这样做:
我创建了一个 EditText
和一个 String
如下:
EditText mEt;
private String m_Text = "";
这是我发起这个 EditText
的地方:
mEt = (EditText) rootView.findViewById(R.id.etEmailNuevo);
然后,我按如下方式执行 AlertDialog
:
LayoutInflater inflater = getLayoutInflater(savedInstanceState);
View dialoglayout = inflater.inflate(R.layout.userdialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
final EditText input = mEt; //null<--------
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(dialoglayout);
builder.setPositiveButton("Cambiar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
Toast.makeText(getActivity(), m_Text, Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
但是,它仍然给我这个EditText
是空的。 我不知道如何 link 这个 EditText
和来自 userdialog
的 R.id.etEmailNuevo
。
您没有正确使用 getText()
。
如果您想在对话框中获取 EditText 的内容,您应该执行以下操作:
1) 在 MyDialog class 中,为您的 EditText 创建一个成员变量
private EditText mEditText;
将 findViewById(R.id.etEmailNuevo) 行设置为等于。
2) 创建一个获取 EditText 当前内容的方法
public String getEntry() {
return mEditText.getText().toString();
}
3) 然后当您创建对话框时,在 onClick 中调用此方法,一切就绪。