Я все еще пытаюсь сделать хороший код, используя cursorAdapter в listView.
Я хочу, чтобы при моей работе, когда я изменяю данные в курсоре, он автоматически обновляет курсор в адаптере, обновляет адаптер и, конечно же, listView.
Magic, есть эта функция: onContentChanged(), которая является функцией CursorAdapter, которая вызывается, когда курсор этого адаптера "уведомлен".
Но я не могу назвать эту функцию.
Теперь интересная часть кода (которая не работает), если кто-то может сказать мне, где я ошибаюсь и в чем мое недоразумение, я буду благодарен.
Мероприятия:
public class EverydayNotesAndroid3Activity extends Activity {
/** Called when the activity is first created. */
private Cursor cursorNotes;
private NoteDataSource dataNoteConnector;
private NotesCursorAdapter notesCursorAdapter;
private InputMethodManager imm;
private Activity activity;
private ListView listView;
private int positionItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
activity = this;
dataNoteConnector = new NoteDataSource(activity);
dataNoteConnector.open();
cursorNotes = dataNoteConnector.getAllNotes();
startManagingCursor(cursorNotes);
listView = (ListView) findViewById(R.id.main_list);
notesCursorAdapter = new NotesCursorAdapter(activity, cursorNotes, 3);
listView.setAdapter(notesCursorAdapter);
Button b = new Button(activity);
b = (Button) findViewById(R.id.done);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dataNoteConnector.createNoteTop("Hello stack overflow world");
}
});
CursorAdapter:
@Override
public void onContentChanged(){
System.out.println("foux de fafa");
this.notifyDataSetChanged();
}
Напомню, что моя проблема в том, что я хочу назвать эту функцию, но она не называется.
И класс базы данных, но я не знаю, имеет ли это значение, потому что вставка в базу данных в порядке:
public Cursor create
NoteTop(String note) {
idNoteMin++;
ContentValues values = new ContentValues();
values.put(DataBaseHelper.DATABASE_ID_NOTE, idNoteMin);
values.put(DataBaseHelper.DATABASE_CONTENT_NOTE, note);
long insertId = database.insert(DataBaseHelper.DATABASE_TABLE_NOTE, null,
values);
Cursor cursor = database.query(DataBaseHelper.DATABASE_TABLE_NOTE,
allColumns, DataBaseHelper.DATABASE_ID_NOTE + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
return cursor;
}
Хорошо, опять мой вопрос:
1) Как я могу вызвать функцию onContentChanged() моего адаптера (без явно явного вызова)
2) Интересно, является ли мой код хорошим способом подачи listView с помощью настраиваемого cursorAdapter.
Спасибо, что обратили внимание.
Он фактически работает наоборот, onContentChanged
вызывается после того, как адаптер уведомляется с notifyDataSetChanged
.
Попробуйте изменить кнопку прослушивания кнопок на это:
@Override
public void onClick(View v) {
dataNoteConnector.createNoteTop("Hello stack overflow world");
notesCursorAdapter.notifyDataSetChanged();
}
Чтобы включить onContentChanged() при каждом изменении данных резервного копирования, вы должны передать флаг CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER в конструктор CursorAdapter. Как это:
mTheAdapter = new CursorAdapter(context, cursor, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
Обратите внимание, что это доступно только в APIv11.
Я прочитал его здесь: http://developer.android.com/reference/android/widget/CursorAdapter.html#FLAG_REGISTER_CONTENT_OBSERVER
Надеюсь, поможет!
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataNoteConnector.createNoteTop("Hello stack overflow world");
}
}