EditText不断返回Empty - Android

时间:2017-11-14 15:19:08

标签: java android null android-edittext

我正在尝试无效检查EditText(这应该足够简单)但是每次我将文本输入到我的两个ET中时 - 它们总是返回为空:“”并且它们不应该(如果它们中有文本) 。

我已经查看了与此相关的其他几篇SO文章,并且没有一个修复程序似乎解决了这个问题。

在这个例子中,有人能发现我可能做错了什么吗?

源代码段:

Java类:

...

public void doneClicked(View v) throws JSONException {

    LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v1 = li.inflate(R.layout.profile_notification_settings_list_edit, null);

    final EditText label = (EditText) v1.findViewById(R.id.emaillabel);
    final EditText value = (EditText) v1.findViewById(R.id.emailvalue);

    String sValue = value.getText().toString();
    if (sValue.matches("")) {
        Toast.makeText(this, "You did not enter a value", Toast.LENGTH_SHORT).show();
        return;
    }

    String sLabel = label.getText().toString();
    if (sLabel.matches("")) {
        Toast.makeText(this, "You did not enter a label", Toast.LENGTH_SHORT).show();
        return;
    }

...

适配器:

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    view = inflater.inflate(R.layout.profile_notification_settings_list_edit, null);
    EditText value = (EditText) view.findViewById(R.id.emailvalue);
    value.setHint("Value");
    value.setText(valueList[i]);

    EditText label = (EditText) view.findViewById(R.id.emaillabel);
    if (labelList != null)
        label.setHint("Label");
    label.setText(labelList[i]);

完整来源:

Java类:

https://pastebin.com/y1e9J1yE

适配器:

https://pastebin.com/Zqh3eCAk

2 个答案:

答案 0 :(得分:3)

因为每次点击你都会创建一个与屏幕上当前显示的视图无关的新view

public void doneClicked(View v) throws JSONException {

    // don't inflate new views
    LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v1 = li.inflate(R.layout.profile_notification_settings_list_edit, null);

    final EditText label = (EditText) v1.findViewById(R.id.emaillabel);
    final EditText value = (EditText) v1.findViewById(R.id.emailvalue);

    // ... code

注意:您无法从rowItemVies直接从ListView获取数据,因此您需要在适配器类中添加方法以获取所选的位置使用rowView获取yourListView.getChildAt(position)并进一步从rowView

中的子项获取数据

答案 1 :(得分:-1)

使用 sValue.trim()。equals("")而不是sValue.matches("")