在我的定制ArrayAdapter类中,我总是使用ViewHolder模式.然而,在CursorAdapter中,getView()方法不是强制要求重写的,而是具有bindViewnewView方法.

我的问题是-CursorAdapter是通过在内部实现ViewHolder模式来重用视图,还是需要像我们在自定义ArrayAdapter中通常所做的那样对其进行编码?如果需要编码,正确的方法是什么?

Update

我用android.support.v4.widget.CursorAdapter

推荐答案

我的问题是-CursorAdapter是否在内部重用视图 实现ViewHolder模式,否则它需要按照我们 通常在自定义ArrayAdapter中做什么?

我不太清楚你说的ViewHolder模式是什么意思.如果您指的是让帮助器类进行缓存,每次查找视图(并将其设置为第View行的标记),那么答案是否定的.如果您希望实现此模式,则需要在newView方法中设置持有符(在带有findViewById的行视图中查找视图),然后将其设置为行视图的标记.然后,在bindView方法中,您可以调用getTag,检索持有符并使用它.例如:

// custom CursorAdapter ...

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View rowView = ((LayoutInflater) context
                .getSystemService("layout_inflater")).inflate(
                R.layout.row_layout, parent, false);
        ViewHolder holder = new ViewHolder();
        holder.v1 = rowView.findViewById(R.id.v1);
        holder.v2 = rowView.findViewById(R.id.v2);
        rowView.setTag(holder);
        return rowView;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        ViewHolder holder = (ViewHolder) view.getTag();
        // use the holder filled with views
        // hlder.v1.setSomething
    }

    class ViewHolder {
        View v1, v2;
    }
// ...

如果您指的是被重用的convertView(比如在基于非Cursor的适配器中),那么答案是肯定的,getView方法实现了这个模式,您只需要实现newViewbindView方法,您就可以保证获得一个被回收的视图(如果当时可能的话).

Database相关问答推荐

包含接受Cassandra中多个数据的语句

UML 类图中关联的复杂规则

任何用于存储过程的静态代码分析工具?

Android SQLiteno such table异常

在 Oracle 中查找数据库的大小

如何在 MS Access 中实现 SQL INTERSECT 和 MINUS 操作

存储过程的缺点

如果限制在本地机器上,最好使用 R 和 SQL

MySQL JDBC Driver中cachePrepStmts和useServerPrepStmts有什么区别

锁定机制(悲观/乐观)如何与数据库事务隔离级别相关?

不可重复读与脏读的区别

Hibernate 的 MariaDB 方言类名称是什么?

执行语句还是运行脚本?

从 postgresql 转储文件填充 MySQL 数据库

使用 PHP 和 MySQL 开发测验Web 应用程序的数据库设计

你如何记录你的数据库 struct ?

从数据库中获取事件

MySQL:为什么使用 VARCHAR(20) 而不是 VARCHAR(255)?

python3k中的sqlite3中的cursor.rowcount总是-1

是否有用于 postgresql 的数据可视化工具,它也能够显示模式间关系?