You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android RecyclerView添加非空校验后仍插入空自定义行问题

问题产生原因

当前的输入校验逻辑存在流程漏洞:

  • 姓名、号码的空判断是两个独立的if-else分支,仅在输入为空时弹出Toast提示,没有中断后续代码执行
  • 无论输入是否合法,list.add()插入数据、notifyItemInserted()刷新列表、关闭弹窗的逻辑都会无条件执行,初始值为空字符串的name和number会被直接存入列表,最终生成空行
  • 原有判断没有处理首尾空格的场景,用户输入全空格时也会被判定为有效内容
  • 额外注意:初始化列表时用的ContactModel构造方法接收三个参数(头像资源ID、姓名、号码),原有插入代码只传了两个参数,如果没有重载双参数构造方法会直接编译报错。
修复方案

修改确认按钮的点击逻辑,只有两个输入项全部校验通过时,才执行插入数据、刷新列表、关闭弹窗的操作,替换后代码如下:

btnAction.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 获取输入内容并去除首尾空白字符
        String name = addTxtName.getText().toString().trim();
        String number = addTxtNumber.getText().toString().trim();
        boolean inputValid = true;

        if (name.isEmpty()) {
            Toast.makeText(MainActivity.this, "Please add a valid name", Toast.LENGTH_SHORT).show();
            inputValid = false;
        }
        if (number.isEmpty()) {
            Toast.makeText(MainActivity.this, "Please add valid contact number", Toast.LENGTH_SHORT).show();
            inputValid = false;
        }

        // 仅当输入全部合法时才执行新增逻辑
        if (inputValid) {
            // 传入默认头像资源,和原有列表项构造参数保持一致
            list.add(new ContactModel(R.drawable.ic_user, name, number));
            adapter.notifyItemInserted(list.size() - 1);
            recyclerView.scrollToPosition(list.size() - 1);
            dialog.dismiss();
        }
    }
});

可选优化点

  • 可以用Android官方工具类TextUtils.isEmpty()代替手写的isEmpty()判断,该方法会自动处理null值,避免空指针异常
  • 校验不通过时可以给对应输入框设置错误提示(setError()),引导用户修正输入
  • 可以额外增加号码长度校验,比如判断手机号长度是否符合规则,进一步提升输入合法性

内容的提问来源于stack exchange,提问作者kalyan roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:48:21