【问题标题】:Validating TextView in Android在 Android 中验证 TextView
【发布时间】:2016-11-10 19:44:50
【问题描述】:

我正在制作一个提醒应用程序,用户需要从日期和时间选择器中设置日期和时间。所以我做了以下事情:

private TextView mDateDisplay;
private TextView mTimeDisplay;
...

// Set reminder button
setButton = (Button) findViewById(R.id.set_reminder_button);
setButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
    if (!validate()) {
        onSetDateTimeFailed();
        return;
       }
       // creating new product in background thread
        db.addReminder(id, mEditMessageText.getText().toString(), mDateDisplay.getText().toString(), mTimeDisplay.getText().toString());
        finish();
    }
});
...

//    Validation
public boolean validate() {
    boolean valid = true;

    String date = mDateDisplay.getText().toString();
    String time = mTimeDisplay.getText().toString();

    if (date.isEmpty() ) {
        mDateDisplay.setError("Set date");
        valid = false;
    } else {
        mDateDisplay.setError(null);
    }

    if (time.isEmpty()) {
        mTimeDisplay.setError("Set time");
        valid = false;
    } else {
        mTimeDisplay.setError(null);
    }

    return valid;
}

public void onSetDateTimeFailed() {
    Toast.makeText(getBaseContext(), "Setting date and time failed", Toast.LENGTH_LONG).show();

    setButton.setEnabled(true);
}

我得到的是 textviews (!) 上的错误符号,但我得到的唯一 toast 消息是 “设置日期和时间失败”,而不是 “设置日期” 或 “设置时间”

我想做的另一件事是在日期和时间中添加一条提醒消息:

private EditText mEditMessageText;
...
//    Validation
public boolean validate() {
    boolean valid = true;

    String message = mEditMessageText.getText().toString();

    if (message.isEmpty() || time.length() < 1 || time.length() > 140) {
        mEditMessageText.setError("Enter between 1 and 140 characters");
        valid = false;
    } else {
        mEditMessageText.setError(null);
    }

但现在,当任何经过验证的字段出现错误时,我也会收到 “输入 1 到 140 个字符” 消息。例如,如果我在 editText 字段中输入了所需的字母数量并且没有选择日期或时间,我会收到此错误消息 “输入介于 1 到 140 个字符之间” 以及 editText 中的错误符号 (!)也是。

【问题讨论】:

  • 你能尝试在验证中捕获异常吗?可能是您看不到的错误
  • 尝试使用 if variable.equals("") 而不是 isEmpty()
  • @Html Tosin 试过了,但我得到了相同的结果。不显示“设置日期”或“设置时间”的 Toast 消息,并且如果任何 TextView 字段为空,则始终显示“输入 1 到 140 个字符”,即使消息字段本身不为空且符合条件。
  • 我想我发现了一个非常相似的问题here 看看它是否有效。在 textview 上设置 Error 有点不同。
  • @Vucko 今晚会试试这个。看起来很有希望:) TY

标签: java android validation textview


【解决方案1】:

参考this question 有助于解决在 TextViews 上设置错误。

至于另一部分,将time.length()替换为message.length()

刚刚将我最有帮助的 cmets 移至答案部分。

【讨论】:

    【解决方案2】:

    @Vucko 得到了我的问题第一部分的答案 - 为什么它总是显示“输入 1 到 140 个字符”,更多地关注我的代码然后我做到了。这是一个语法错误。我写的是 time.length() 而不是 message.length()。

    对于我的问题的第二部分 - 如何显示 TextViews 的消息我在 Vucko 发布的链接上找到了解决方案 - Android setError("error") not working in Textview 通过添加

        style="@android:style/Widget.EditText"
    

        android:focusable="true"
        android:focusableInTouchMode="true"
    

    到我的 xml 文件。

    TY Vucko

    【讨论】:

    • 没问题,兄弟。我本来希望得到像接受的答案这样的信用:D 我可以结合这两部分来写我自己的答案吗?我寻求得到回报,找到所有错误真是太棒了:)
    • @Vucko 确定 :) 再次感谢
    【解决方案3】:

    试试这个:

    public boolean validate() {
            String date = mDateDisplay.getText().toString();
            String time = mTimeDisplay.getText().toString();
            String message = mEditMessageText.getText().toString();
    
            if (date.isEmpty()) {
                Toast.makeText(getBaseContext(), "Set date", Toast.LENGTH_SHORT).show();
                return false;
            } else if (time.isEmpty()) {
                Toast.makeText(getBaseContext(), "Set time", Toast.LENGTH_SHORT).show();
                return false;
            } else if (message.isEmpty() || time.length() < 1 || time.length() > 140) {
                Toast.makeText(getBaseContext(), "Enter between 1 and 140 characters", Toast.LENGTH_SHORT).show();
                return false;
            } else {
                return true;
            }
        }
    

    【讨论】:

    • 我试过了,它通过显示第一个 toast 消息来显示消息,如果我修复它,它将显示第二个......但它不显示 (!) 符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多