2台のローダーがあります。まず、私のDBにSMSを読み込みます。もう1つは私のDBからカーソルアダプタにSMSを読み込みます。私のリストビューは、すべてのSMSが自分のDBに挿入された後にのみ更新されます。 'はonLoadFinished
ですべてのSMSがロードされた後にのみListViewが更新されます
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id) {
case SMS_LOADER: {
String[] projection = {
BaseColumns._ID,
Telephony.TextBasedSmsColumns.DATE_SENT,
Telephony.TextBasedSmsColumns.BODY
};
return new CursorLoader(this,
BASE_CONTENT_URI,
projection,
null,
null,
null);
}
case MY_DB_LOADER: {
String[] projection = {
MyEntry._ID,
MyEntry.COLUMN_1,
MyEntry.COLUMN_2
};
return new CursorLoader(this,
MyEntry.CONTENT_URI,
projection,
null,
null,
null);
}
default:
Log.e(LOG_TAG, "Unsupported id " + id);
return null;
}
}
私は:2つのローダーとここ
@Override
protected void onCreate(Bundle savedInstanceState) {
...
ListView listView = (ListView) findViewById(R.id.list);
mAdapter = new MyCursorAdapter(this, null);
listView.setAdapter(mAdapter);
...
getSupportLoaderManager().initLoader(SMS_LOADER, null, this);
getSupportLoaderManager().initLoader(MY_DB_LOADER, null, this);
}
あるonCreateLoader
onCreate
でS' ここで
...
private static final int SMS_LOADER = 0;
private static final int MY_DB_LOADER = 1;
MyCursorAdapter mAdapter;
...
がinitLoader
次のとおりです。ここで
はローダーとアダプタですSMSカーソルを通過し、私のDBに挿入:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
int id = loader.getId();
switch (id) {
case SMS_LOADER:
while (data.moveToNext()) {
int columnIndexDateSent = data.getColumnIndex(Telephony.TextBasedSmsColumns.DATE_SENT);
int columnIndexBody = data.getColumnIndex(Telephony.TextBasedSmsColumns.BODY);
String date = data.getString(columnIndexDateSent);
String body = data.getString(columnIndexBody);
ContentValues values = new ContentValues();
values.put(MyEntry.COLUMN_1, date);
values.put(MyEntry.COLUMN_2, body);
getContentResolver().insert(MyEntry.CONTENT_URI, values);
}
break;
case MY_DB_LOADER:
mAdapter.swapCursor(data);
break;
default:
Log.e(LOG_TAG, "Unsupported id " + id);
}
}
は、私はそれが挿入を作るために適切な場所ではないと思い、Androidのメーカーは言い続ける原因:
は、アプリケーションがそのメインスレッド上であまりにも多くの仕事をやっていてもよいです。
これらの挿入部分はどこに移動しますか? DBに最初の行を挿入した後にlistViewを更新する方法は?