Bagi saya, tidak jelas bagaimana mendapatkan kursor yang tepat jika Anda memiliki banyak Loader. Katakanlah Anda mendefinisikan dua Loader yang berbeda dengan:
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
lalu di onCreateLoader () Anda melakukan hal yang berbeda bergantung pada id:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
if (id==0){
CursorLoader loader = new CursorLoader(getActivity(),
MaterialContentProvider.CONTENT_URI,null,null,null,null);
}else{
CursorLoader loader = new CursorLoader(getActivity(),
CustomerContentProvider.CONTENT_URI,null,null,null,null);
};
return loader;
}
sejauh ini baik. Tetapi cara mendapatkan kursor yang tepat di onLoadFinished () karena Anda tidak mendapatkan id untuk mengidentifikasi Cursor yang tepat untuk Cursoradapter yang tepat.
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
mycursoradapter1.swapCursor(cursor);
if(isResumed()){
setListShown(true);
}else {
setListShownNoAnimation(true);
}
}
//and where to get the cursor for mycursoradapter2
atau saya salah dan ini adalah cara yang salah untuk mendapatkan hasil untuk dua adaptor kursor yang berbeda dalam satu fragmen.
android
android-loadermanager
android-loader
Kay Gladen
sumber
sumber
LoaderCallbacks
dalam hal ini) dengan lebih dari satu Tipe. Ini hanya berfungsi dalam kasus Anda karena kedua kali, hasilnya adalah aCursor
.Loader
s. Silakan buka stackoverflow.com/a/20839825/2818583Jawaban:
Kelas Loader memiliki metode yang disebut getId () . Saya berharap ini mengembalikan id yang Anda kaitkan dengan loader.
sumber
getId()
?Gunakan metode getId () dari Loader:
sumber
Jika pemuat Anda tidak memiliki kesamaan selain jenis kelas dari hasil (di sini
Cursor
:), Anda lebih baik membuat duaLoaderCallbacks
contoh terpisah (hanya sebagai dua kelas dalam dalam Aktivitas / Fragmen Anda), masing-masing didedikasikan untuk satu perlakuan pemuat, bukan daripada mencoba mencampur apel dengan jeruk.Dalam kasus Anda, tampaknya sumber data dan perlakuan hasil berbeda, yang mengharuskan Anda menulis kode boilerplate tambahan untuk mengidentifikasi skenario saat ini dan mengirimkannya ke blok kode yang sesuai.
sumber
Activity
pelaksanaanLoaderCallbacks
dan melewatithis
untukgetLoaderManager().initLoader()
adalah untuk memastikan bahwaLoaderManager
bertindak sebagai saluran komunikasi antaraActivity
danLoader
melaluiLoaderCallbacks
. Bagaimana saluran komunikasi itu dibuat di sini sebagaiActivity
tidak menerapkanLoaderCallbacks
melainkan menciptakan kelas dalam anonim?LoaderCallbacks
. Tidak perlu menggunakanActivity
dirinya sendiri sebagaiLoaderCallbacks
. Lebih mudah membuat beberapa saluran komunikasi saat Anda membutuhkannya.