View.onSaveInstanceState() and View.onRestoreInstanceState()

      a.如果在此Activty中启动其他应用,当返回时系统为我门保存了当前状态(应该也是调用了以下方法来保存)。

       b.如果是在其他子Activty中启动其他应用,当返回时View滑动状态就会丢失。


       View类有一个继承自AbsSavedState的BaseSavedState类,所有View的子类都会继承这个BaseSavedState类。当然包括ListView,TextView等等。


public class MarqueeTextView extends TextView implements OnClickListener
{

    public final static String TAG = MarqueeTextView.class.getSimpleName();

    private float step = 0f;        

    public boolean isStarting = false;

 @Override
    public Parcelable onSaveInstanceState()
    {
        Parcelable superState = super.onSaveInstanceState();
        SavedState ss = new SavedState(superState);
        ss.step = step;
        ss.isStarting = isStarting;
        return ss;
    }
 
    @Override
    public void onRestoreInstanceState(Parcelable state)
    {
        if (!(state instanceof SavedState))
        {
            super.onRestoreInstanceState(state);
            return;
        }
        SavedState ss = (SavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());
        step = ss.step;
        isStarting = ss.isStarting;
    }
 
    public static class SavedState extends BaseSavedState
    {
        public boolean isStarting = false;
        public float step = 0.0f;
 
        SavedState(Parcelable superState)
        {
            super(superState);
        }
 
        @Override
        public void writeToParcel(Parcel out, int flags)
        {
            super.writeToParcel(out, flags);
            out.writeBooleanArray(new boolean[]
                { isStarting });
            out.writeFloat(step);
        }
 
        public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>()
        {
            public SavedState[] newArray(int size)
            {
                return new SavedState[size];
            }
 
            @Override
            public SavedState createFromParcel(Parcel in)
            {        
                return new SavedState(in);
            }
        };
 
        @SuppressWarnings("unused")
        private SavedState(Parcel in)
        {
            super(in);
            boolean[] b = new boolean[1];
            in.readBooleanArray(b);
            if (b != null && b.length > 0)
                isStarting = b[0];
            step = in.readFloat();
        }
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值