Получить ввод AlertDialog
У меня две таможни
AlertDialog
. Все работает, так как я не могу получить ввод пользователя, я создал класс под названием MyDialog и поставил конструктор. Кроме того, я думал поставить геттер с EditText
; тем не менее, я не могу найти способ получить входные данные.Вот
MyDialog
класс: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
в это время. Я не знаю, как это назвать. Я попробовал с getText().toString();
внутри а Toast
тем не менее, он так и не появился. Что я сделал не так?Вот где я использовал этот класс:
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();
И мой класс выглядит так:
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
является нулевым. Я не знаю, как это связать EditText
с R.id.etEmailNuevo
от userdialog
.