Java 如何将以前添加的片段及其视图重新显示和恢复到容器中

Java 如何将以前添加的片段及其视图重新显示和恢复到容器中,java,android,android-fragments,fragment,Java,Android,Android Fragments,Fragment,这里我有代码(函数)用于将片段加载到容器中 public void loadFragment(Fragment targetFragment, int containerId) { if (!targetFragment.isAdded()) { Toast.makeText(this, "Adding First Time", Toast.LENGTH_SHORT).show(); supportFragmentManager.beginTransac

这里我有代码(函数)用于将片段加载到容器中

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();
    }

}
代码的问题是
如果part
工作正常,如果没有添加片段的实例,它只会添加该片段实例,但是当我尝试重新加载该片段时,什么也没有发生,似乎我在加载先前添加的片段时犯了错误
else part

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

在代码中:

     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();
            }

经过几次实验

这是我找到的最好的解决办法

每当调用Fragment reloads onCreate函数返回视图时,与其每次都创建视图的新实例,不如返回以前的实例


公共类AnyFragment扩展了Fragment{
//片段视图
私有视图viewObj=null;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
//它不会膨胀新视图,而是会检查以前的视图
如果(viewObj==null){
viewObj=充气机。充气(R.layout.FRAMETE\U output\U,容器,false);
}
返回viewObj;
}

}
我试过了,但似乎不起作用!通过使用先分离然后附加,它将不会重用片段的先前视图状态!我也想保持状态,这就是为什么我试图把唯一的附加!!!为了重用片段以前的视图状态,您应该通过SharedReference保存状态,并从sharedPreference读取状态是的,但我不想使用它!我要继续运行被重新固定的碎片!好的…在else块中的代码中删除代码,只从SharedPrefere读取,并为片段视图设置新值。。。什么是新价值?视图状态更改时,新值保存在SharedReference中。。。这意味着你应该只刷新视图。我同意你的评论,但事实上,mate里面也有object Animator,这取决于某个过程,该过程会不断更新片段内进度条的值!如果将分离片段,然后将值存储到bundle或共享首选项,那么它也可能会删除null引用错误