Tworzę nową przykładową aplikację na Androida z jednym działaniem i wieloma fragmentami.Nie można wykonać tej akcji wewnątrz aplikacji onLoadFinished
Najpierw uruchamiam "OverviewFragment" (mój pulpit), który powinien zawierać podstawowe informacje. Mój PrzeglądFragment ładuje informacje za pomocą "AccountProvider" (ContentProvider). Jeśli baza danych jest pusta, OverviewFragment powinny być zastępowane z moim WelcomeFragment ...
Oto kod:
public class OverviewFragment extends BaseFragment
implements LoaderManager.LoaderCallbacks {
private static final int LOADER_ACCOUNTS = 10;
private static final int LOADER_TRANSACTIONS = 20;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(LOADER_ACCOUNTS, null, this);
//getLoaderManager().initLoader(LOADER_TRANSACTIONS, null, this);
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
Uri uri = null;
String[] projection = null;
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;
switch (id) {
case LOADER_ACCOUNTS:
uri = WalletProvider.CONTENT_URI;
projection = new String[]{DBHelper.ACC_ID, DBHelper.ACC_TITLE};
sortOrder = DBHelper.ACC_TITLE;
break;
}
CursorLoader cl = new CursorLoader(getActivity(),
uri, projection, selection, selectionArgs, sortOrder);
return cl;
}
@Override
public void onLoadFinished(Loader loader, Object data) {
switch (loader.getId()) {
case LOADER_ACCOUNTS:
bindAccounts((Cursor) data);
break;
}
}
@Override
public void onLoaderReset(Loader loader) {
}
private void bindAccounts(Cursor cursor) {
boolean showCreateWallet = true;
if (cursor != null && cursor.moveToFirst()) {
showCreateWallet = false;
}
if (showCreateWallet) {
listener.changeFragment(new WalletCreateFragment());
}
}
i tu moja główna działalność
@Override
public void changeFragment(Fragment fragmentToLoad) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragmentToLoad)
.commit();
}
... jeśli teraz uruchamiam moją aplikację z pustą bazą danych, otrzymuję komunikat o błędzie widoczny w tytule.
Wiem, że nie powinienem zmieniać fragmentu funkcji onLoadFinished .... ale gdzie mogę to zrobić? to? : P
przepraszam za mój angielski =)
możliwe duplikat [Android - problemy z wykorzystaniem FragmentActivity + Loader do aktualizacji FragmentStatePagerAdapter] (http://stackoverflow.com/questions/7746140/android-problems-using-fragmentactivity-loader-to-update-fragmentstatepagera) – rds