【问题标题】:Problem with "ViewHolder" class in androidandroid中“ViewHolder”类的问题
【发布时间】:2009-08-26 04:07:34
【问题描述】:

我对“ViewHolder”类有疑问。我使用“ViewHolder”来改进我的列表显示语音。我认为代码没问题,但它会抛出异常 我正在将“setText”与“Cursor”中的数据一起使用。这是我的代码:

if(row==null){
            LayoutInflater inflater = LayoutInflater.from(context);         
            row = inflater.inflate(R.layout.sbooks_row, null);
            holder = new ViewHolder();

            holder.id = (TextView)row.findViewById(R.id.id);
            holder.title = (TextView)row.findViewById(R.id.title);
            holder.icon = (ImageView)row.findViewById(R.id.icon);

            row.setTag(holder);
        }
        else
        {
            holder = (ViewHolder)row.getTag();
        }

        holder.title.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE)));
        holder.id.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_ROWID)));

【问题讨论】:

    标签: android list android-cursor android-viewholder


    【解决方案1】:

    你没有说异常是什么。我猜是NullPointerException,意思是:

    1. android:id="@+id/title" 所在行中没有小部件,或者
    2. 您的结果集中没有名为 SBooksDbAdapter.KEY_TITLE 的列,或者
    3. 不知何故,您正在创建标签中没有持有人的行

    【讨论】:

    • 我的代码在没有“ViewHolder”的情况下运行一切正常,但是当我编辑我的代码以使用“ViewHolder”时它会抛出异常。所以,First, Seconds 可能不是这种情况。第三个呢?你能解释清楚吗?我不明白“创建没有持有人的行”?
    • 再一次,你没有说异常是什么,所以你在强迫我继续猜测。一种猜测是它是 NullPointerException。可能为 null 的一件事是您的 holder 局部变量。如果您有一些 getTag() 返回 null 的行,它将为 null。如果您从未在该行上调用 setTag(),则 getTag() 将返回 null。这就是我所说的“创建没有持有人的行”。
    • 对不起,你的猜测是正确的。当我调试我的代码时它“说”NullPointerException。如果您向我展示一些代码 sn-p 取决于我上面的代码,这将很有帮助。无论如何,我会检查它,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2021-09-05
    相关资源
    最近更新 更多