我仍然试图通过在listView上使用cursorAdapter来创建一个好的代码。
我希望在我的活动中,当我更改光标中的数据时,它会自动更新适配器中的光标,更新适配器,当然还有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;
}
好的,我的2个问题:
1)如何调用我的适配器的onContentChanged()函数(当然不显式调用它)
2)我想知道我的代码是否是用自定义cursorAdapter提供listView的好方法。
感谢您的关注。
答案 0 :(得分:2)
它实际上是相反的,在onContentChanged
通知适配器后调用notifyDataSetChanged
。
尝试将按钮点击监听器更改为:
@Override
public void onClick(View v) {
dataNoteConnector.createNoteTop("Hello stack overflow world");
notesCursorAdapter.notifyDataSetChanged();
}
答案 1 :(得分:1)
要在每次支持数据更改时触发onContentChanged(),必须将标志CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER传递给CursorAdapter的构造函数。像这样:
mTheAdapter = new CursorAdapter(context, cursor, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
请注意,这仅适用于APIv11。
希望它有所帮助!
答案 2 :(得分:-1)
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataNoteConnector.createNoteTop("Hello stack overflow world");
}
}