带有EditText的警报对话框返回null,因为它在分配值之前返回



我有一个应用程序,我想调用一个用数字输入打开对话框的方法,我的问题是,每当将值插入EditText并按下正面按钮它返回零,然后首先在下一个呼叫上的值。

通过调试,我发现它创建了元素,然后返回后来跳过了我的作业语句。

如何防止它返回太早?

private String numbers;
    private String getWeight(){
        final EditText edittext = new EditText(this);
        edittext.setInputType(InputType.TYPE_CLASS_PHONE);
        AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
        builder1.setMessage("How much do you weigh?");
        builder1.setView(edittext);
        builder1.setCancelable(true);
        builder1.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                    numbers = edittext.getText().toString();
                dialog.cancel();
            }
        });
        builder1.setNeutralButton(
                "Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        numbers = edittext.getText().toString();
                        dialog.cancel();
                    }
                });
        AlertDialog alert11 = builder1.create();
        alert11.show();
        return numbers;
    }

因此,在键入时将EditText内容放在字符串中。

String content;
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
    content = s.toString();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
if(TextUtils.isEmpty(s)) {
// call method
}
}
});

和setPositiveButton在这里获取内容字符串。

我也有同样的问题,并使用以下方法修复了它。

您应该为视图创建静态XML布局。不要以编程方式构建它。

更新您的代码

private String numbers;
private String getWeight(){
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View mView = inflater.inflate(R.layout.weight_simple_input, null);
    builder.setView(mView);
    AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
    builder1.setMessage("How much do you weigh?");
    builder1.setView(mView);
    builder1.setCancelable(true);
    builder1.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
                numbers = ((EditText) mView.findViewById(R.id.phone)).getText().toString();
            dialog.cancel();
        }
    });
    builder1.setNeutralButton(
            "Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    numbers = edittext.getText().toString();
                    dialog.cancel();
                }
            });
    AlertDialog alert11 = builder1.create();
    alert11.show();
}

,虽然您在类范围中定义了数字,但您无需再次返回。在您想要的任何地方使用它。

最后,这是layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
  <EditText
    android:layout_width="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="@dimen/text_margin"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/weight" />
 </LinearLayout>

最新更新