Android开发从入门到放弃(2)保存Activity的状态

移动设备的一个特点就是会经常在不同的APP之间切换,例如,你在使用一个APP的时候,有可能你会接到一个电话,或者点开了一个推送消息而跳转到了另一个APP,一段时间之后你会再次回到原来的APP,这时为了防止用户数据的丢失,你可能需要在用户离开APP时将有些东西保存起来,然后当用户回来后再把保存的数据恢复回来。本篇博客就会简单介绍一些如何保存Activity的状态。

首先,新建一个Android项目,在activity_main.xml中,将代码修改为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.zdk.statesaver.MainActivity">
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Count"
        android:onClick="onClickCounter"/>
    <TextView
        android:id="@+id/textViewCounter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

我添加了一个Button和一个TextView。下面是MainActivity.java的代码

public class MainActivity extends AppCompatActivity {

    static final String KEY_COUNTER = "COUNTER";
    private int mCounter=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClickCounter(View view) {
        mCounter++;
        ((TextView)findViewById(R.id.textViewCounter)).setText("Counter: " + Integer.toString(mCounter));
    }
}

每次点击Button时,都会将一个计数器+1,并显示在TextView上。
运行上面的代码,运行的不错。但是,如果你旋转手机屏幕至横屏,你会发现,TextView不显示了,回到了最初的状态。其实,当APP进入横屏模式(landscape模式)时,Android系统会重新创建Activity,导致mCounter的值变为了0,TextView的文字也不见了。如何解决呢?

解决方法就是分别实现Activity的onSaveInstanceState方法和onRestoreInstanceState方法,前者用于保存状态,后者用于恢复状态。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(KEY_COUNTER,mCounter);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    mCounter=savedInstanceState.getInt(KEY_COUNTER);
    ((TextView)findViewById(R.id.textViewCounter)).setText(
            "Counter: " + Integer.toString(mCounter));
}

然后运行APP,先点击几下Button,然后翻转屏幕至横屏,发现状态还保留着,同样,再回到竖屏时状态也保留着。

好,博客写到这里。祝你的Android开发之路从入门到放弃,不谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值