首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android片段-在哪里保存状态(带有自定义对象的链表)?

Android片段-在哪里保存状态(带有自定义对象的链表)?
EN

Stack Overflow用户
提问于 2016-08-24 17:04:36
回答 3查看 221关注 0票数 2

在我的应用程序中,我有一个活动和9个片段,当用户从片段1转到片段2时,它们总是被替换并保存在后台堆栈中。片段1的方法onDestroyView被调用,在那里我清理了所有的文件(我有一个很大的链表,里面有一些自定义对象)和其他对象,如果我将它们保存在内存中,OutOfMemory异常将被抛出。

我应该把这个列表存储在哪里?在数据库里?在共享首选项中(我在这里看到你需要做一些修改才能实现)。起初,我想将它们存储在onSaveInstanceState方法提供的包中,但该方法从未被调用过,因为它与活动紧密相关,而活动只是充当所有片段的“容器”容器。

我认为在片段中关联OnSaveInstanceState并不是一个好的做法(对于我所需要的)。所以在on Pause中,我清理了所有的字段,我应该将它们存储在重新创建片段的地方,并在重新创建片段时获取所有变量,并在用户离开时创建视图。(例如将位置保留在回收器视图中,等等)

关于这一点我搜索了很多,没有找到任何关于这一点的具体答案。

因此,为了让问题变得更清楚,问题如下:

在android中,保存碎片状态(回收器视图中的位置+正在显示的对象列表+其他字段)的最佳实践是什么?我应该使用一个将存储所有字段的DB还是SharedPreferences?或者有没有其他我没有提到/发现的方法?

我主要关心的是android在这个问题上的最佳实践,以及性能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-29 22:42:34

经过进一步的研究,(最后)我发现关于这个问题的最佳实践是使用数据库,因为您存储了重新创建片段所需的所有属性。关于数据库,我读到了一些领域库,我对它做了一些研究,我发现它是一个非常容易使用的库,也是一个非常复杂的库。

点击此处查看更多详情:https://realm.io/docs/java/latest/

票数 1
EN

Stack Overflow用户

发布于 2016-08-24 17:18:37

这可能会有所帮助。Android Developer Parceable您可以使自定义对象扩展为Parceable。尝试查找Android Parceable example 2

票数 0
EN

Stack Overflow用户

发布于 2016-08-24 17:23:05

您可以使用带有片段的TabHost,它将自动维护状态这是我的Main2Activity代码

代码语言:javascript
代码运行次数:0
运行
复制
    public class Main2Activity extends AppCompatActivity {
private FragmentTabHost mTabHost;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);

    mTabHost.addTab(
            mTabHost.newTabSpec("tab1").setIndicator("Tab 1", null),
            Tab1Fragment.class, null);
    mTabHost.addTab(
            mTabHost.newTabSpec("tab2").setIndicator("Tab 2", null),
            Tab2Fragment.class, null);
    mTabHost.addTab(
            mTabHost.newTabSpec("tab3").setIndicator("Tab 3", null),
            Tab3Fragment.class, null);

}}

这是我的activity_main2.xml

代码语言:javascript
代码运行次数:0
运行
复制
<android.support.v4.app.FragmentTabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >



        <FrameLayout
            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"/>
    </LinearLayout>

</android.support.v4.app.FragmentTabHost>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39118931

复制
相关文章

相似问题

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