如何在alertDialog中查看我在editText窗口中输入的文本?

时间:2015-02-23 14:11:21

标签: java android

我在AlertDialog窗口中有以下代码,我想让用户输入一个数字(我在int m_Text中存储)。我有两个问题:我无法看到我输入的数字,如果我按下输入而没有任何数字,它就会崩溃。我该如何解决? (当我按下按钮时执行方法pressMe()

public void pressMe(){
       final EditText input = new EditText(this);
       input.setInputType(InputType.TYPE_CLASS_NUMBER );
        AlertDialog.Builder myAlert = new AlertDialog.Builder(this);
        myAlert.setMessage("Enter number:")
                .setView(input)
                .setPositiveButton("Enter", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        m_Text = Integer.parseInt(input.getText().toString());
                        Log.d(TAG," Number :  "+m_Text");
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .setTitle("Test")
                .setIcon(R.drawable.ic_launcher)
                .create();
        myAlert.show();
    }

2 个答案:

答案 0 :(得分:1)

您的应用程序崩溃的原因在于:

Integer.parseInt(input.getText().toString());

当输入文本为空时,您尝试在整数上解析"",然后获得NumberFormatException

你必须处理这种情况,例如在下面的代码中:

final String str = input.getText().toString().trim();
m_Text = str.length() == 0 ? 0 : Integer.parseInt(str);

final String str = input.getText().toString().trim();
if(str.length() != 0){
     m_Text = Integer.parseInt(str);
}

我不明白你的第一个问题。如果你向我解释,我会帮助你。

<强>更新 当我尝试你的代码时,我得到如下结果:

Image

答案 1 :(得分:0)

阅读本文档 http://developer.android.com/guide/topics/ui/dialogs.html

如果您想在应用程序中使用任何类型的对话框。

1)创建一个将扩展DialogFragment类的类。

2)覆盖onCreateDialog()方法和内部编写正面按钮和负面按钮的代码

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.dialog_fire_missiles)
           .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // FIRE ZE MISSILES!
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    // Create the AlertDialog object and return it
    return builder.create();
}

}

3)使用此代码从HostActivity调用Fragment

DialogFragment newFragment = new YourFragmentClass();
newFragment.show(getSupportFragmentManager(), "missiles");

如果你想要一个CustomLayout那么

1)在res-&gt; customLayout.xml中创建一个XML文件,并在那里放置您想要的视图(在您的情况下在该布局上绘制单个EditText),不要为正面或负面按钮添加按钮它们已经是由DialogFragment添加。

2)在dialogFragment的onCreateDialog()里面做这样的事情

// Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();

    final EditText et_text=(EditText)getActivity().findViewById(R.id.editTextId);

    builder.setView(inflater.inflate(R.layout.custom_layout, null))

           // Add action buttons
           .setPositiveButton(R.string.send, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {


                   String mob=et_text.getText().toString();

                    //Do What you want to do with EditText

           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {

                   //Coding for Negative Button Here
               }
           });      
    return builder.create();

}

您可以将EventBack传递给托管活动。 阅读参考文件

希望这会对你有所帮助