保存视图的状态

时间:2013-11-29 05:42:59

标签: android view savestate

是否有一种简单的方法可以将整个视图组与其数据一起保存?例如,如果最初我有这个视图,并且在应用程序运行期间一些视图的背景图像更改,一些视图变得不可见,或其“文本更改,等等。如果用户退出应用程序,我如何保存视图的状态?

<RelativeLayout android:layout_width="wrap_content" android:id="@+id/water_room_common"
    android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"
    >

    <!-- storage layout -->
<View android:id="@+id/gap" android:layout_width="wrap_content"
        android:layout_height="0dip" android:layout_alignParentBottom="true" />

    <RelativeLayout android:id="@+id/storage"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_above="@id/gap" android:layout_marginBottom="10dp"
        android:layout_marginRight="27dp" android:layout_marginLeft="10dp"
        android:layout_toLeftOf="@id/bag" android:orientation="horizontal"
        >

        <ImageButton android:id="@+id/ImageButton02"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignTop="@+id/ImageButton01"
            android:layout_marginRight="16dp" android:layout_toLeftOf="@+id/ImageButton01"
            android:background="@drawable/single_square" android:onClick="itemSelected" />

        <ImageButton android:id="@+id/ImageButton03"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignTop="@+id/ImageButton01"
            android:layout_centerHorizontal="true" android:layout_marginRight="16dp"
            android:layout_toLeftOf="@+id/ImageButton02" android:background="@drawable/single_square"
            android:onClick="itemSelected"
            />

        <ImageButton android:id="@+id/ImageButton04"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignTop="@+id/ImageButton01"
            android:layout_marginRight="16dp" android:layout_toLeftOf="@+id/ImageButton03"
            android:adjustViewBounds="true" android:background="@drawable/single_square"
            android:onClick="itemSelected"
            />

        <ImageButton android:id="@+id/ImageButton05"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignTop="@+id/ImageButton01"
            android:layout_marginRight="16dp" android:layout_toLeftOf="@+id/ImageButton04"
            android:adjustViewBounds="true" android:background="@drawable/single_square"
            android:onClick="itemSelected"
            />

        <ImageButton android:id="@+id/ImageButton06"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignTop="@+id/ImageButton01"
            android:layout_marginRight="16dp" android:layout_toLeftOf="@+id/ImageButton05"
            android:adjustViewBounds="true" android:background="@drawable/single_square"
            android:onClick="itemSelected"
             />

        <ImageButton android:id="@+id/ImageButton01"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true" android:background="@drawable/single_square"
            android:onClick="itemSelected" 
             />
    </RelativeLayout>

    <ImageButton android:id="@+id/bag" android:layout_width="65dp"
        android:layout_height="65dp" android:layout_alignBottom="@+id/storage"
        android:layout_alignParentRight="true" android:layout_marginRight="10dp"
        android:adjustViewBounds="true"
        android:onClick="bagClicked"/>
    <ImageButton android:id="@+id/left" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_alignLeft="@+id/storage"
        android:layout_centerVertical="true" android:background="@null"
        android:onClick="previousWall" android:src="@drawable/left" />
    <ImageButton android:id="@+id/right" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_alignRight="@id/bag"
        android:layout_centerVertical="true" android:background="@null"
        android:onClick="nextWall" android:src="@drawable/right" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

answer。您需要覆盖onSaveInstanceState进行暂时更改,或覆盖onPauseonResume进行永久性更改。

阅读API指南here

更新

这是this training的摘要 想象这个场景。你有一个记事本应用程序。在主屏幕上,用户具有最近创建的注释列表(NoteList活动),并且用户可以选择创建新注释或编辑现有注释,并且更改将存储在数据库中。 当用户单击某个项目时,会将另一个活动(NoteEditActivity)带到前台。如果用户正在编辑注释并且NoteEditActivity由于某种原因而失去焦点(例如,调用进来或者用户只是决定切换到另一个应用而不点击“确认按钮”),NoteEditActivity将从焦点转移到被停顿后不久就停了下来。 要防止用户丢失当前编辑,您需要调用onPause,以便保存对数据库的任何更改。现在,如果应用程序处于停止状态(onStop)且用户返回编辑状态,则不会通过onCreate,而是通过onResume,这是您要从中“恢复”的地方用户离开的地方。

这张图应该进一步解释。 注意每次活动即将集中而不是onCreate时,如何调用onResume。

您可以按照上述培训进行更好的理解。

enter image description here