获取AlertDialog输入 [英] Get AlertDialog input

查看:75
本文介绍了获取AlertDialog输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个海关 AlertDialog 所有的工作,因为我无法得到用户的输入,我已经创建了一个名为MyDialog的类并放置了构造函数。此外,我想放一个带有的getter的EditText ;尽管如此,我找不到获取输入的方法。



这是 MyDialog 类:

  public   class  MyDialog {
public static AlertDialog.Builder create( final 上下文上下文, 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 上使用这个类。 我不知道怎么称呼它。我在 Toast 中尝试了 getText()。toString(); ;然而,它没有显示出来。我做错了什么?



这是我使用这个课程的地方:

 AlertDialog.Builder myDialog = MyDialog.create(context,getLayoutInflater(savedInstanceState),  Cambio de email 介绍nuevo email); 
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框, int id){

}
})
.setNegativeButton(R.string.cancelaruserdialog,null)
.show();



< b>编辑1



我已将代码更改为:

  final  AlertDialog.Builder myDialog = MyDialog.create(context,getLayoutInflater(savedInstanceState),  Cambio de email 介绍nuevo email ); 
final String pew = MyDialog.getEntry();
myDialog.setPositiveButton(R.string.canviaruserdialog, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框, 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 上下文上下文, 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错误

< pre lang =java> 2927 -2927 / info.androidhive.slidingmenu E / AndroidRuntime:FATAL EXCEPTION:main
流程:info.androidhive.slidingmenu, PID: 2927
java.lang.NullPointerException:尝试调用虚方法' android.text.Editable android.widget.EditText.getText()'对空对象引用
at info.androidhive.slidingmenu.MyDialog.getEntry(MyDialog.java: 26
at info.androidhive.slidingmenu.ConfiguracionFragment.onClick(ConfiguracionFragment.java: 45
在android.view.View.performClick(View.java: 4756
在android.view.View $ PerformClick.run(查看.java: 19749
在android.os.Handler.handleCallback(Handler) .java: 739 )android.os.Handler.dispatchMessage上的
(Handler.java: 95
在android.os.Looper.loop(Looper.java: 135
在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 字符串 m_Text = ;



这是我发起此 EditText

 mEt =(EditText)rootView.findViewById(R.id.etEmailNuevo); 



然后,我按如下方式执行 AlertDialog

 LayoutInflater inflater = getLayoutInflater(savedInstanceState); 
查看dialoglayout = inflater.inflate(R.layout.userdialog,null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

对话框对话框= 对话框(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

final EditText input = mEt; // null< --------

输入。 setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(dialoglayout);

builder.setPositiveButton( Cambiar new DialogInterface.OnClickListener(){
@ Override
public void onClick(DialogInterface对话框, int ){
m_Text =输入。 getText()。toString();
Toast.makeText(getActivity(),m_Text,Toast.LENGTH_LONG)。show();
}
});
builder.setNegativeButton( 取消 DialogInterface.OnClickListener(){
@ Override
public void onClick(DialogInterface对话框, int ){
dialog.cancel();
}
});

builder.show();



然而,仍然给我这个 EditText 为空。 我不知道如何将此 EditText R.id链接.etEmailNuevo 来自 userdialog

解决方案

PerformClick.run(View.java: 19749
在android.os.Handler.handleCallback(Handler.java: 739
在android.os.Handler.dispatchMessage(Handler.java: 95
在android.os.Looper .loop(Looper.java: 135
在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 字符串 m_Text = ;



这是我发起此 EditText

 mEt =(EditText)rootView.findViewById(R.id.etEmailNuevo); 



然后,我按如下方式执行 AlertDialog

 LayoutInflater inflater = getLayoutInflater(savedInstanceState); 
查看dialoglayout = inflater.inflate(R.layout.userdialog,null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

对话框对话框= 对话框(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

final EditText input = mEt; // null< --------

输入。 setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(dialoglayout);

builder.setPositiveButton( Cambiar new DialogInterface.OnClickListener(){
@ Override
public void onClick(DialogInterface对话框, int ){
m_Text =输入。 getText()。toString();
Toast.makeText(getActivity(),m_Text,Toast.LENGTH_LONG)。show();
}
});
builder.setNegativeButton( 取消 DialogInterface.OnClickListener(){
@ Override
public void onClick(DialogInterface对话框, int ){
dialog.cancel();
}
});

builder.show();



然而,仍然给我这个 EditText 为空。 我不知道如何将此 EditText R.id链接.etEmailNuevo 来自 userdialog


什么是rootView?根据你的代码逻辑,你应该使用dialoglayout而不是rootView。

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


I've got two customs AlertDialog. All work since I can't get the input of the user, I've created a class called MyDialog and put the constructor. Furthermore, I thought to put a getter with the EditText; nevertheless, I can't find the way to get the input.

Here is 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;
    }
}


I've created inside the EditText and instead of setText(), I put getText(); however, I'm using this class on my Fragment at the time. I don't know how to call it. I tried with getText().toString(); inside a Toast; nevertheless, it didn't show up. What I've done wrong?

Here is where I've used this 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();


EDIT 1

I've changed my code to:

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();


And my class looks like:

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();
}


And this is the Logcat error:

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)


Edit 2

I've changed the logic. I've created an EditText and a String as follows:

EditText mEt;
private String m_Text = "";


Here is where I initiate this EditText:

mEt = (EditText) rootView.findViewById(R.id.etEmailNuevo);


Then, I do the AlertDialog as follows:

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();


However, it is still giving me this EditText is null. I don't know how to link this EditText with R.id.etEmailNuevo from userdialog.

解决方案

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)


Edit 2

I've changed the logic. I've created an EditText and a String as follows:

EditText mEt;
private String m_Text = "";


Here is where I initiate this EditText:

mEt = (EditText) rootView.findViewById(R.id.etEmailNuevo);


Then, I do the AlertDialog as follows:

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();


However, it is still giving me this EditText is null. I don't know how to link this EditText with R.id.etEmailNuevo from userdialog.


What is rootView? According to your code logic, you should use dialoglayout instead of rootView.

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


after inflating your layout.


这篇关于获取AlertDialog输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆