gpt4 book ai didi

android - 在 SimpleCursorAdapter 中使用 AsyncTask

转载 作者:行者123 更新时间:2023-11-30 04:14:20 24 4
gpt4 key购买 nike

为了提高我的 ListView 的性能,我实现了一个 AsyncTask 来处理对 Cursor 的一些操作。这是代码。

public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.desc = (TextView) convertView.findViewById(R.id.desc);
holder.status = (TextView) convertView.findViewById(R.id.status);
holder.path = (TextView) convertView.findViewById(R.id.path);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.position = position;
convertView.setTag(holder);
Log.d(Tag.getTag(this), "convertView is null");
} else {
holder = (ViewHolder) convertView.getTag();
}

class CursorTask extends AsyncTask<ViewHolder, Void, String[]> {
private ViewHolder v;
private String vdstatus, mbpath, vsname, vsdesc, vsstatus, vspath;
String iconid;
@Override
protected String[] doInBackground(ViewHolder... params) {
v = params[0];
Cursor mCursor = getCursor();
mCursor.moveToPosition(position);
String[] mArray = new String[] { mCursor.getString(1),
mCursor.getString(2), mCursor.getString(5),
mCursor.getString(7), mCursor.getString(6),
sdpath + propmanager.mbActivePath(),
mCursor.getString(4) };
return mArray;
}

@Override
protected void onPostExecute(String[] mArray) {
super.onPostExecute(mArray);
vsname = mArray[0];
vsdesc = mArray[1];
vsstatus = mArray[2];
vspath = mArray[3];
vdstatus = mArray[4];
mbpath = mArray[5];
iconid = mArray[6];
if (v.position == position) {
v.name.setText(vsname);
v.desc.setText(vsdesc);
v.status.setText(vsstatus);
v.path.setText(vspath);
switch (Integer.parseInt(iconid)) {
case 0: {
v.icon.setImageDrawable(drawable_a2s);
break;
}
.................
.................
.................
case 17: {
v.icon.setImageDrawable(drawable_cid);
break;
}
}
if (vdstatus == "false") {
v.status.setTextColor(Color.RED);
} else {
v.status.setTextColor(Color.parseColor("#4B8A08"));
}
if (mbpath.equals(vspath)) {
v.name.setTextColor(Color.RED);
}
}
}
}
new CursorTask().execute(holder);
return convertView;
}

static class ViewHolder {
ImageView icon;
TextView name, desc, status, path;
int position;
}

问题在于,在 ListView 的某些 position 中 [朝向末尾和顶部(一开始正确显示,但滚动后显示错误)] 数据显示错误。我也有 8 个 ListView child 但我得到的 position 的最大值是 4。为什么会这样?我该如何解决这个问题?

最佳答案

这确实是低效且耗费资源的。你真的应该在你的应用程序中使用一次 AsyncTask 将你的 ListView 数据加载到内存中,然后将它保存在那里并用于填充你的 ListView 项目.您的问题的解决方案是缓存而不是在后台加载

关于android - 在 SimpleCursorAdapter 中使用 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287358/

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