在android中我有一個自定義適配器,在這個自定義適配器中,我創建了一個視圖,其中包含一些文本和一個按鈕以刪除文本。所有這些工作正常,我可以從數據庫中刪除記錄,但我一直無法刷新列表。從光標適配器的ListFragment內更新列表視圖
列表看起來有點像這樣:
------------------------------------
text text text text | Delete Button|
------------------------------------
text text text text | Delete Button|
------------------------------------
我的第一反應是用這樣的:
QCListFragment frag = (QCListFragment) getSupportFragmentManager().findFragmentById(R.id.listFragment);
在什麼時候我可以打電話給我的名單片段裏面的方法重新 - 查詢列表... 但我不能這樣做,因爲我的適配器不擴展片段。所以我發現很難讓片段知道數據已經改變。
無論如何,我最後的想法只是重建活動,但我認爲這可能不是最好的事情,並且必須有更好的方法......我確信這是簡單的,我我錯過了最後一個問題!
(我可以發佈更多的代碼,如果這將是有益的) 更新: 這裏我的整個適配器類
公共類CalcCursorAdapter擴展SimpleCursorAdapter實現的可篩選{
private Context mContext;
private ListView mListView;
private int mLayout;
private Cursor mcursor;
protected static class ViewHolder {
protected TextView text;
protected ImageButton button;
private int position;
}
@SuppressWarnings("deprecation")
public CalcCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
{
super(context, layout, c, from, to);
this.mContext = context;
this.mLayout = layout;
this.mcursor = c;
//mListView = .getListView();
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView summary = (TextView)view.findViewById(R.id.calctvPrice);
TextView savings = (TextView)view.findViewById(R.id.calctvSavings);
summary.setText(cursor.getString(cursor.getColumnIndexOrThrow("qcFinalPrice")));
savings.setText(cursor.getString(cursor.getColumnIndexOrThrow("qcSavings")));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.calc_list_item, parent, false);
holder.button = (ImageButton) v.findViewById(R.id.qcbtnDelete);
holder.button.setOnClickListener(deleteButton);
holder.position = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
bindView(v, context, cursor);
v.setTag(holder);
return v;
}
private OnClickListener deleteButton = new OnClickListener() {
public void onClick(View v){
View view = (View) v.getParent();
ViewHolder holder = (ViewHolder) view.getTag();
int position = holder.position;
DbHelper mDbHelper;
mDbHelper = new DbHelper(mContext);
mDbHelper.open();
mDbHelper.deleteCalc(position);
mDbHelper.close();
String test = Integer.toString(position);
Toast.makeText(mContext.getApplicationContext(), test, Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
};
public long qcItemId(int position) {
return position;
}
}
任何非常感謝幫助!
謝謝。
你試過notifyDatasetChanged()方法嗎? – Varundroid
該片段不處理點擊,適配器,這是因爲被點擊的按鈕是在列表中。並意味着(至少據我所知)我不能調用adapter.notifyDatasetChanged(),因爲我在適配器內... – Klaven
看看我的答案,讓我知道如果你現在可以打電話notifyDatasetChanged()方法。我們會盡力幫助你。 – Varundroid