首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android中的片段作为单例

Android中的片段作为单例
EN

Stack Overflow用户
提问于 2013-02-13 02:21:53
回答 1查看 21.3K关注 0票数 23

一般问题我可以将片段定义为单例吗?

特定问题在我的应用程序中,我有一个带有FragmentPager的'FragmentActivity‘,它有两个片段,FragmentAFragmentB

我在FragmentA扩展Fragment类中将片段定义为单例:

代码语言:javascript
复制
private static instance = null;

public static FragmentA getInstance() {
    if (instance == null) {
        instance = new FragmentA();
    }   
    return instance;
}
private FragmentA() {}

在我的FragmentPagerAdapter中:

代码语言:javascript
复制
@Override
public Fragment getItem(int position) {
    switch(position){
    Fragment fragment = null;
    case 0:
        fragment = FragmentA.getInstance(); 
        break;
    case 1:
        fragment = FragmentB.getInstance(); 
        break;
    }
    return fragment;
}

这就是我如何扩展fragments布局的:

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    fragmentView = (RelativeLayout) inflater.inflate(R.layout.fragment_a_layout, container, false);
    return fragmentView;
}

My Problem:

当我第一次启动我的应用时,一切都运行得很好。当我关闭我的应用程序,然后重新启动它时,我看不到两个片段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-13 02:26:41

片段是指应用程序的可重用组件。您不应该将它们作为单例使用,而应该实现Fragment.SavedState或onSavedInstanceState。

代码语言:javascript
复制
public class YourFragment extends Fragment {
    // Blah blah blah you have a lot of other code in this fragment
    // but here is how to save state
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", mCurCheckPosition);
    }
    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // savedInstanceState will have whatever you left in the outState bundle above
    }
}
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14839152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档