由易信界面——談談fragment 狀態的保存


看看我要實現的效果:

其實,這種左右界面切換保存布局方式,不只是易信界面這么用罷了。這更是大多數app布局的主流,而在android平台上面,隨着谷歌大力推薦fragment的使用,用fragment實現這樣的效果自然是一種大勢所趨的事情。

其實fragment實現這樣的布局方式本身是一件easy的事情了,我這里要討論一件事情,如何保存每個fragment狀態。這也是fragment使用的一個難題。  我google了一下,百度了一下,終於在csdn上找到了一種解決方式,通過相應顯示隱藏方式來保存:

 1             int tabIndex=0,tag=0;
 2             fragment[] fragments=new fragment[]{A.class,B.class,C.class,D.class};
 3             Fragment newFragment = fragments[tag];
 4             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
 5             if (!getSupportFragmentManager().getFragments().contains(fragments[tag])) {
 6                 transaction.add(R.id.main_content, newFragment);
 7             }
 8 
 9             transaction.addToBackStack(null);
10             
11             transaction.hide(fragments[tabIndex]);
12             transaction.show(newFragment);
13 
14 
15 
16             transaction.commit();
17             tabIndex = tag;

可是鄙人的電腦上support-v4的包並不支持getFragments這個方法,沒辦法自己重新寫一個list來保存,並且判斷一下list中是否保存此fragment。list中另外的fragment對象進行了隱藏,相應的方法如下:

private void hideFragment(FragmentTransaction fragmentTransaction,Fragment[] fragments2,Fragment fragment) {
        // TODO Auto-generated method stub
            final   Class class1= fragment.getClass();
        for (int i = 0; i < fragments2.length; i++) {
            if (!fragments2[i].getClass().equals(class1)) {
                        fragmentTransaction.hide(fragments2[i]); 
            }
        }
        
    }

有了這個方法之后,相應的狀態就保存起來了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM