パフォーマンスを向上させるために、でいくつかの操作を処理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;
}
これに伴う問題は、position
[最後と上に向かって(最初は正しく表示されますが、スクロールすると正しく表示されません)ListView
]、データが正しく表示されないことです。また、私は8ListView
child
秒ですが、取得する最大値position
は4です。なぜこれが発生するのですか?どうすればこれを修正できますか?