listViewでcursorAdapterを使用して、適切なコードを作成しようとしています。
アクティビティで、カーソル内のデータを変更すると、アダプター内のカーソルが自動的に更新され、アダプターともちろん listView が更新されることを望みます。
マジック、この関数があります: 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) 私のコードは、listView にカスタムの cursorAdapter を供給する良い方法なのだろうか。
ご注意いただきありがとうございます。