【问题标题】:The fragment which is got from backstack, call onCreateView() again从 backstack 获取的片段,再次调用 onCreateView()
【发布时间】:2013-12-10 07:27:18
【问题描述】:

请帮我解决我的问题。

我有一个带有框架布局的MainActivity。我想将一些片段替换到框架布局中。现在我遇到一个问题,它是:

1) 我创建了片段 A 并将其放入 framelayout。片段 A 称为 onCreateView...等。

2) 然后我创建了片段 B 并将其放入布局中……片段 A 被放在了后台堆栈上,它称为onPause()(不称为onDeattach()onDestroy...)

3) 我按下了返回按钮。片段 A 是从 backstack 中获得的,但它再次调用了onCreateView()。此操作使我的应用程序有一些其他问题。

所以我的问题是如何将片段 A 存储在 backstack 中并且它不会重新创建视图。

这是用来改变片段的方法:

public static void setContent(FragmentManager managerFragment, Fragment detailFragment) {
    if (managerFragment != null) {
        if(lastFragment==null && detailFragment instanceof HomeVer3Fragment ||
                (lastFragment!=null && detailFragment instanceof HomeVer3Fragment && lastFragment instanceof HomeVer3Fragment)){
            return;
        }
        String tag=detailFragment.getClass().getName();
        managerFragment.popBackStackImmediate(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        FragmentTransaction ft = managerFragment.beginTransaction();
        ft.replace(R.id.content_frame, detailFragment);
        ft.addToBackStack(tag);
        ft.commit();
        lastFragment = detailFragment;
    }
}

感谢和抱歉我的问题,我的英语不好。

【问题讨论】:

标签: android fragment back-stack


【解决方案1】:

在这里查看我的完整帖子Dynamically changing the fragments inside a fragment tab host?

至于你的重新加载问题(我假设)你可以做一些如下所述的事情:

(1) 初始化一个布尔值说

boolean android_hacker = false;

(2) 现在说你需要获取数据并使用列表视图创建一些视图。现在在这个阶段设置“android_hacker = true;”获取所有数据后。

(3) 现在,当 U 再次回到同一个片段时说“FragmentA”,然后检查 OnCreateView 上的值,如上所述 ..

if(android_hacker != true){
        new GoAsyncTask().execute();
        }else{
// Perform stuff U need
}

就是这样。希望对大家有所帮助

【讨论】:

  • 我认为片段从后台弹出后总是调用 onCreateView
  • 是的,当然每次都会调用方法,因为那是片段的流程。解决方案仅适用于同一件事。试一试。
  • @AndroidHacker 你可以修复什么stackoverflow.com/questions/60327414/… ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多