В андроиде У меня есть пользовательский адаптер, в этом пользовательском адаптере Я создаю представление с некоторым текстом и кнопкой для удаления текста. Все это прекрасно работает, и я могу удалить запись из базы данных, но мне не удалось обновить список.Обновление списка в ListFragment из адаптера курсора
Список выглядит немного как это:
------------------------------------
text text text text | Delete Button|
------------------------------------
text text text text | Delete Button|
------------------------------------
Мой первый инстинкт должен был использовать что-то вроде этого:
QCListFragment frag = (QCListFragment) getSupportFragmentManager().findFragmentById(R.id.listFragment);
В какой момент я мог бы вызвать метод внутри моего списка фрагмента повторно -получите список ... Но я не могу этого сделать, потому что мой адаптер не расширяет фрагмент. Поэтому мне трудно сообщить фрагменту, что данные были изменены.
Как бы то ни было, моя последняя мысль состояла в том, чтобы восстановить активность, но я подумал, что это, вероятно, не лучшее, что нужно сделать, и что должен быть лучший способ ... Я уверен, что это что-то простое, что я Мне не хватает моего последнего вопроса!
(я могу разместить больше кода, если это будет полезно) UPDATE: Вот весь мой класс адаптера
общественный класс 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