gpt4 book ai didi

android - 无法在 onLoadFinished 内执行此操作

转载 作者:IT王子 更新时间:2023-10-28 23:28:58 26 4
gpt4 key购买 nike

我正在创建一个新的示例 android 应用,其中包含一个 Activity 和许多 fragment 。

首先我正在启动“OverviewFragment”(我的仪表板),它应该显示一些基本信息。我的 OverviewFragment 使用“AccountProvider”(ContentProvider)加载信息。如果数据库为空,OverviewFragment 应该替换为我的 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());
}
}

这是我的主要 Activity

    @Override
public void changeFragment(Fragment fragmentToLoad) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragmentToLoad)
.commit();
}

现在...如果我使用空数据库启动我的应用程序,我会收到您在标题中看到的错误..

我知道我不应该更改 onLoadFinished 函数中的 fragment .... 但我可以在哪里做呢? :P

对不起我的英语 =)

最佳答案

这是安卓的bug。要解决这个问题,请使用 Handler 来替换/添加/调用 onLoadFinished 内部的 Fragment,如下所示:

final int WHAT = 1;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == WHAT) changeFragment(fragmentToLoad);
}
};
handler.sendEmptyMessage(WHAT);

关于android - 无法在 onLoadFinished 内执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com