Member 10579921 Ответов: 1

Получить ввод 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.

1 Ответов

Рейтинг:
0

Xiao Ling

Что такое rootView? Согласно вашей логике кода, Вы должны использовать dialoglayout вместо rootView.

TextView mEt = (EditText)dialoglayout.findViewById(R.id.etEmailNuevo);

после надувания вашего макета.