我目前正試圖重寫一個簡單的適配器,以允許我爲每個listitem使用一個imagbutton。重寫SimpleCursorAdapter不正確的數據和位置返回
代碼到目前爲止:
public class MyCursorAdapter extends SimpleCursorAdapter {
Cursor mCursor;
final int tIndex;
final class ViewHolder{
public TextView textView;
public ImageButton imageButton;
}
public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
mCursor = c;
tIndex = mCursor.getColumnIndex(DBAdapter.TASK);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (mCursor.moveToPosition(position)){
ViewHolder viewHolder;
final int i = position;
if (convertView == null){
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.listview,parent,false);
viewHolder.textView = (TextView)convertView.findViewById(R.id.taskName);
viewHolder.imageButton = (ImageButton)convertView.findViewById(R.id.edit_task);
viewHolder.imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("LOG_TAG", "It Works: " + i);
}
});
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}
String task = mCursor.getString(tIndex);
viewHolder.textView.setText(task);
}
return convertView;
}
}
使用我父活動顯示數據庫的內容,並使用備用活動將數據添加到數據庫中。我稱光潔度()上交替活動,以確保用戶被返回給父活動,在的onResume父活動()方法使用:
@Override
protected void onResume() {
super.onResume();
cursor.moveToFirst();
myCursorAdapter.swapCursor(cursor = db.getAllRows());
list.startLayoutAnimation();
amountTasks();
}
當用戶返回到父活動,該數據被錯誤地顯示,列表視圖的文本將是最後進入的副本,並且位置爲0。
我發現,如果我改變return語句:
return super.getView(position,convertView,parent)
文本正確顯示,但位置仍返回0.
任何想法爲什麼會發生這種情況?
一般不要擴展SimpleCursorAdapter,請使用http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html代替 – pskink
@pskink感謝您的建議,我會研究所提到的實現函數:) –