首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ListView 不顯示數據:getCount 返回 0 或 getView 返回 null、ViewHolder 模式誤用

     編輯:程式設計綜合問答

常見原因排查

  1. Adapter.getCount() 返回 0:數據源列表為空或未正確賦值。
  2. getView() 返回 null:忘記 return convertView; 或邏輯分支缺少返回。
  3. ViewHolder 使用錯誤:未正確 setTag/getTag,導致 findViewById 重複或控件為空。
  4. ListView 高度為 0:父佈局 wrap_content 但 ListView 在 ScrollView 中 (需展開)。

標準 Adapter 寫法

public class MyAdapter extends BaseAdapter {
    private List<String> data;
    private LayoutInflater inflater;

    public MyAdapter(Context ctx, List<String> data) {
        this.data = data;
        inflater = LayoutInflater.from(ctx);
    }

    @Override public int getCount() { return data.size(); }
    @Override public Object getItem(int pos) { return data.get(pos); }
    @Override public long getItemId(int pos) { return pos; }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item, parent, false);
            holder = new ViewHolder();
            holder.tv1 = convertView.findViewById(R.id.tv1);
            holder.tv2 = convertView.findViewById(R.id.tv2);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tv1.setText(data.get(pos));
        holder.tv2.setText("Index: " + pos);
        return convertView; // 關鍵:必須返回
    }

    static class ViewHolder {
        TextView tv1, tv2;
    }
}

調試技巧

  • 在 getCount、getView 加日誌打印位置參數。
  • 用 Hierarchy Viewer 或 Layout Inspector 檢查 ListView 實際高度與子 View 結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved