gpt4 book ai didi

android - 子类化 SimpleCursorAdapter 以包含 convertView 以节省内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:40 25 4
gpt4 key购买 nike

我一直在浏览示例和教程,但我似乎无法理解如何在子类化的 SimpleCursorAdapter 中处理回收。我知道对于常规 ArrayAdapter,您可以检查 convertView 是否为 null,如果为 null,则从 xml 中进行膨胀,如果不为 null,则回收,但我在想象它如何与 SimpleCursorAdapter 子类中的 from 和 to 数组一起工作时遇到了一些麻烦。我试图从 Commonsware 的 The Busy Coders Guide to Android Development 中弄清楚这一点,但没有成功。如果有人知道任何提示、示例或教程,我将不胜感激。

最佳答案

我找不到任何好的示例来子类化 SimpleCursorAdapter 以使用 convertView 回收方法,所以我最终改为子类化 CursorAdapter。这实际上对我的实现非常有效,并且随着内存使用量的显着减少而变得非常快。回收 View 确实有效,我强烈推荐它!

这是我的实现示例:

 private static class MyNiftyAdapter extends CursorAdapter
{
private LayoutInflater mInflater;
private Cursor cur;

public MyNiftyAdapter(Context context, Cursor c) {
super(context,c);
this.mInflater = LayoutInflater.from(context);
this.cur = c;
}
public MyNiftyAdapter(Context context, Cursor c, boolean autoRequery)
{
super(context, c, autoRequery);
this.mInflater = LayoutInflater.from(context);
this.cur = c;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
if(convertView == null)
{
convertView = this.mInflater.inflate(R.layout.chamber_item, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView)convertView.findViewById(R.id.Name);
viewHolder.city = (TextView)convertView.findViewById(R.id.city);
viewHolder.state = (TextView)convertView.findViewById(R.id.state);
viewHolder.country = (TextView)convertView.findViewById(R.id.country);
convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolder)convertView.getTag();
}
this.cur.moveToPosition(position);

viewHolder.name.setText(this.cur.getString(this.cur.getColumnIndex(MyDBHelper.NAME)));
viewHolder.city.setText(this.cur.getString(this.cur.getColumnIndex(MyDBHelper.CITY)));
viewHolder.state.setText(this.cur.getString(this.cur.getColumnIndex(MyDBHelper.STATE)));
viewHolder.country.setText(this.cur.getString(this.cur.getColumnIndex(MyDBHelper.COUNTRY)));

return convertView;
}
/* (non-Javadoc)
* @see android.widget.CursorAdapter#bindView(android.view.View, android.content.Context, android.database.Cursor)
*/
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Dont need to do anything here

}
/* (non-Javadoc)
* @see android.widget.CursorAdapter#newView(android.content.Context, android.database.Cursor, android.view.ViewGroup)
*/
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// Dont need to do anything here either
return null;
}

static class ViewHolder
{
TextView name;
TextView city;
TextView state;
TextView country;
}
}

我列表中的每一行现在都完全按照我的要求显示名称、城市、州和国家/地区。希望这会有所帮助。

关于android - 子类化 SimpleCursorAdapter 以包含 convertView 以节省内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com