• 为什么在listview上只显示一行,不论list有几个数据,都只显示第一行的


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 m0_74474210 2024-05-15 11:35 采纳率: 93.8% 浏览 11 首页/ 编程语言 / 已结题 为什么在listview上只显示一行,不论list有几个数据,都只显示第一行的 java 而且在app inspection里查看数据库,显示nodebuggable process detected dataBase.getAll(); Cursor cursor=dataBase.getReadableDatabase().query(DataBase.TABLE1,null,null,null,null,null,null); useradapter useradapter=new useradapter(this,cursor); userview.setAdapter(useradapter); public ArrayList getAll() { ArrayListlist=new ArrayList(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TABLE1, null, null, null, null, null, null); while (cursor.moveToNext()){ do { @SuppressLint("Range") User user=new User( cursor.getString(cursor.getColumnIndex(COLUMN_NAME)), cursor.getInt(cursor.getColumnIndex(COLUMN_AGE)), cursor.getInt(cursor.getColumnIndex(COLUMN_WEIGHT)) );list.add(user); //Toast.makeText(mcontext, user.getName()+user.getAge()+user.getWeight(), Toast.LENGTH_SHORT).show(); // Log.i("",user.getName()+user.getAge()+user.getWeight()); }while (cursor.moveToNext()); }cursor.close(); return list; } @Override public View getView(int position, View convertView, ViewGroup parent) { Viewuser viewuser; if (convertView==null){ viewuser=new Viewuser(); convertView=LayoutInflater.from(context).inflate(R.layout.listview2,null); viewuser.name=convertView.findViewById(R.id.name); viewuser.age=convertView.findViewById(R.id.age); viewuser.weight=convertView.findViewById(R.id.weight); convertView.setTag(viewuser); }else viewuser=(Viewuser) convertView.getTag(); if (cursor.getCount()!=0){ if (cursor.moveToPosition(position)){ viewuser.name.setText(DataBase.slh(context).getName(cursor)); viewuser.age.setText(DataBase.slh(context).getAge(cursor)); viewuser.weight.setText(DataBase.slh(context).getWeight(cursor)); } } return convertView; } 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 专家-皆知 2024-05-15 11:35
      关注

      检查ListView适配器是否正确绑定所有数据。

      以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

      本回答被题主选为最佳回答 , 对您是否有帮助呢?
      评论
      专家-皆知 回复 m0_74474210 2024-05-15 11:36

      根据您提供的代码片段,我注意到在getView()方法中的问题。当列表项被重用时(即convertView不为null),你应该从Cursor中获取当前位置的数据并更新视图。然而,在您的代码中,您始终尝试将数据移动到position,这可能导致在某些情况下不会正确显示所有数据。

      以下是修改后的getView()方法,修复了这个问题:

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          ViewUser viewUser;
          if (convertView == null){
              viewUser = new ViewUser();
              convertView = LayoutInflater.from(context).inflate(R.layout.listview2, null);
              viewUser.name = convertView.findViewById(R.id.name);
              viewUser.age = convertView.findViewById(R.id.age);
              viewUser.weight = convertView.findViewById(R.id.weight);
              convertView.setTag(viewUser);
          } else {
              viewUser = (ViewUser) convertView.getTag();
          }
      
          if (cursor != null && cursor.moveToPosition(position)) { // Check if cursor is not null before moving to position
              viewUser.name.setText(DataBase.slh(context).getName(cursor));
              viewUser.age.setText(DataBase.slh(context).getAge(cursor));
              viewUser.weight.setText(DataBase.slh(context).getWeight(cursor));
          }
          
          return convertView;
      }
      

      另外,关于 "nodebuggable process detected" 的警告,这通常意味着你的应用可能没有正确的调试信息,导致无法进行调试。这不会影响应用的功能,但会使得调试变得困难。要解决这个问题,你需要确保在构建应用时启用了调试选项。对于Android Studio,你可以在项目设置的build.gradle文件中检查android{}部分下的debuggable true是否被注释掉或者配置错误。如果没有问题,那么可能是你的设备设置问题,确保在设备开发者选项中未禁用USB调试。

      如果你仍然遇到问题,建议检查一下以下几个方面:

      1. 确保DataBase.slh(context)返回的是正确的实例,并且它能正确地从Cursor中获取数据。
      2. 检查listview2.xml布局文件,确认视图ID(name、age、weight)是否与Java代码中匹配。
      3. 通过Log或者Toast输出数据,确认数据是否从数据库正确读取。

      如果你需要更深入的帮助,比如代码审查或者具体步骤指导,请随时告诉我。

      回复
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    终于有人把Java程序员必学知识点整理出来了,令人有如醍醐灌顶
    【Sqoop】解决 “Sqooq从Hive中导出数据到MySQL中出现乱码” 的问题
    关于MyBatis-plus中为什么要重写ServiceImpl接口中的问题
    Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
    部署笔记:文件句柄调整和磁盘分区 02
    在虚拟机上安装win10/ubuntu的教程
    【vue】实现打印功能
    如何规避MyBatis使用过程中带来的全表更新风险
    【算法刷题 | 贪心算法02】4.24(摆动序列)
    TCP IP 网络编程(七) 理解select和epoll的使用
  • 原文地址:https://ask.csdn.net/questions/8103749