Я создаю новое приложение для Android с одним действием и многими фрагментами.
Сначала я запускаю "OverviewFragment" (моя панель инструментов), которая должна показывать некоторые основные сведения. My OverviewFragment загружает информацию с помощью "AccountProvider" (ContentProvider). Если база данных пуста, обзорFragment должен быть заменен моим WelcomeFragment...
Вот какой код:
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());
}
}
и здесь моя основная деятельность
@Override
public void changeFragment(Fragment fragmentToLoad) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragmentToLoad)
.commit();
}
Теперь... если я запускаю свое приложение с пустой базой данных, я получаю ошибку, которую вы видите в заголовке.
Я знаю, что я не должен изменять фрагмент в функции onLoadFinished.... но где я могу это сделать?: P
Извините за мой английский =)