首页 > 解决方案 > 如何重新显示和恢复先前添加的片段及其视图到容器

问题描述

在这里,我有将片段加载到容器中的代码(函数)......

public void loadFragment(Fragment targetFragment, int containerId) {

    if (!targetFragment.isAdded()) {
        Toast.makeText(this, "Adding First Time", Toast.LENGTH_SHORT).show();
        supportFragmentManager.beginTransaction().add(containerId, targetFragment,targetFragment.getClass().getName()).commit();

    } else {
        Toast.makeText(this, "Showing The Privious Instance of Fragment", Toast.LENGTH_SHORT).show();
        supportFragmentManager.beginTransaction().attach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName())).commit();
    }

}

代码的问题if part是正常工作,如果没有添加片段实例,它只会添加该片段实例,但是当我尝试重新加载该片段时没有任何反应,似乎我在else part加载先前添加的片段时出错了!

标签: javaandroidandroid-fragmentsfragment

解决方案


代码中的问题: 您忘记在附加之前使用分离方法

在您的代码中:

     if (!targetFragment.isAdded()) {
                Toast.makeText(this, "Adding First Time", Toast.LENGTH_SHORT).show();
                supportFragmentManager.beginTransaction().add(containerId, targetFragment,targetFragment.getClass().getName()).commit();

            } else {
                Toast.makeText(this, "Showing The Privious Instance of Fragment", Toast.LENGTH_SHORT).show();
                supportFragmentManager.beginTransaction()
    .detach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName()))    

.attach(supportFragmentManager.findFragmentByTag(targetFragment.getClass().getName()))
        .commit();
            }

推荐阅读