如何经常添加和删除相同的片段

时间:2012-11-16 16:32:20

标签: android fragment fragmenttransaction

我的应用程序通常会多次添加然后删除相同的片段。以下是我的工作方式:

Add fragment

if (mHomeFragment == null)
    {
        mHomeFragment = new HomeFragment();
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit();
            }
        }, getResources().getInteger(R.integer.transition_duration));
    }
else
    {
        getSupportFragmentManager().beginTransaction().add(R.id.dummy, mHomeFragment).commit();
    }

Remove fragment

getSupportFragmentManager().beginTransaction().remove(mHomeFragment).commit();

问题是,当从活动导航包含该片段(HomeFragment)到另一个活动时,我的应用程序有时会崩溃。我试图找出原因,但仍然没办法。我这里没有完整的错误日志,因为这个错误不会经常发生,但错误与此https://android.googlesource.com/platform/frameworks/support/+/5506618c80a292ac275d8b0c1046b446c7f58836%5E!/相同:

IllegalStateException: Failure saving state......active HomeFragment{419494f0} has cleared index: -1 

有没有人发现我的代码有任何问题,或者只是知道如何修复此错误,请帮助我。提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

听起来,在活动暂停或结束后,runnable可能正在运行。只需确保在onPause方法上调用handler.removeCallback,以避免在活动完成后回调活动。

如果您需要经常交换片段,可以使用FragmentTransaction hideshow方法,以避免初始化开销。