首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在onLoadFinished内执行此操作

无法在onLoadFinished内执行此操作
EN

Stack Overflow用户
提问于 2014-04-01 22:20:22
回答 1查看 7.8K关注 0票数 19

我正在创建一个新的示例android应用程序,其中包含一个activity和多个片段。

首先,我启动了"OverviewFragment“(我的仪表板),它应该会显示一些基本信息。我的OverviewFragment使用"AccountProvider“(ContentProvider)加载信息。如果数据库为空,则应该用我的WelcomeFragment替换OverviewFragment ...

下面是一些代码:

代码语言:javascript
复制
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());
    }
}

下面是我的主要活动

代码语言:javascript
复制
    @Override
public void changeFragment(Fragment fragmentToLoad) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, fragmentToLoad)
            .commit();
}

现在..。如果我用一个空数据库启动我的应用程序,我会得到标题中看到的错误。

我知道我不应该更改onLoadFinished函数中的片段...但是我可以在哪里做呢?

对不起,我的英语=)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-26 03:14:54

这是android的一个bug。要解决此问题,请使用处理程序替换/添加/调用onLoadFinished中的片段,如下所示:

代码语言:javascript
复制
final int WHAT = 1;
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {                    
        if(msg.what == WHAT) changeFragment(fragmentToLoad);            
    }
};
handler.sendEmptyMessage(WHAT);
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22788684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档