如何在android中保存片段状态? [英] How to save fragment state in android?

查看:158
本文介绍了如何在android中保存片段状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个HomeActivity来自我正在调用片段列表的地方。在HomeActivity中,我有加载所有片段的sidemenu。



现在,在这个列表中,我有一个名为HomeFragment的片段,它使用webservice向Google Map显示数据。 p>

我想要的是我只装载一次(第一次)碎片加载Map Dat,而不是每次单击sidemenu或从任何其他碎片进入时。 / p>

我的HomeFragment或任何其他片段一次加载,而不是每次加载。

你可以隐藏/显示片段。无需更换,删除。例如,我有2段FragmentFeed和FragmentNotification,我们可以隐藏/显示或添加片段。



处理点击菜单:

  if(tabId.equals(AppConstants.FEED)){
pushFragments(tabId,getFragmentFeed());
} else if(tabId.equals(AppConstants.NOTIFICATION)){
pushFragments(tabId,getFragmentNotification());
}

处理显示/隐藏并添加片段:

  public void pushFragments(String tag,Fragment fragment){

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();


if(manager.findFragmentByTag(tag)== null){
ft.add(R.id.realtabcontent,fragment,tag);
}

片段fragmentFeed = manager.findFragmentByTag(TAG_FEED);
片段fragmentNoti = manager.findFragmentByTag(TAG_NOTIFICATION);

//隐藏所有片段
if(fragmentFeed!= null){
ft.hide(fragmentFeed);
}
if(fragmentNoti!= null){
ft.hide(fragmentNoti);


//显示当前的片段
if(tag == TAG_FEED){
if(fragmentFeed!= null){
ft.show($ fragmentFeed);


if(tag == TAG_NOTIFICATION){
if(fragmentNoti!= null){
ft.show(fragmentNoti);
}
}



ft.commitAllowingStateLoss();
}


I have one HomeActivity from where I am calling the list of fragments. In HomeActivity I have sidemenu where all fragments are loaded.

Now,in this list i have one fragment called HomeFragment which display the Google Map with data, using webservice.

What i want is i want to load the Map dat only once(first time) fragment is loaded, not every time when click on sidemenu or come in from any other fragment.

My HomeFragment or any other fragments are loaded at once, not every time.

解决方案

You can hide/show fragment. No need to replace, remove. For ex, I have 2 fragments FragmentFeed and FragmentNotification, we can hide/show or add fragment.

Handle click menu:

if (tabId.equals(AppConstants.FEED)) {
                    pushFragments(tabId, getFragmentFeed());
                } else if (tabId.equals(AppConstants.NOTIFICATION)) {
                    pushFragments(tabId, getFragmentNotification());
                }

Handle show/hide and add fragment:

public void pushFragments(String tag, Fragment fragment) {

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();


        if (manager.findFragmentByTag(tag) == null) {
            ft.add(R.id.realtabcontent, fragment, tag);
        }

        Fragment fragmentFeed = manager.findFragmentByTag(TAG_FEED);
        Fragment fragmentNoti = manager.findFragmentByTag(TAG_NOTIFICATION);

        // Hide all Fragment
        if (fragmentFeed != null) {
            ft.hide(fragmentFeed);
        }
        if (fragmentNoti != null) {
            ft.hide(fragmentNoti);
        }

        // Show  current Fragment
        if (tag == TAG_FEED) {
            if (fragmentFeed != null) {
                ft.show(fragmentFeed);
            }
        }
        if (tag == TAG_NOTIFICATION) {
            if (fragmentNoti != null) {
                ft.show(fragmentNoti);
            }
        }



        ft.commitAllowingStateLoss();
    }

这篇关于如何在android中保存片段状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆