如何保存 Activity 的状态或者(Activiy 重启怎么保存数 据?)

Activity 的状态通常情况下系统会自动保存的,只有当我们需要保存额外的数据时才需要使用到这样的功能。

一般来说, 调用onPause()和onStop()方法后的activity 实例仍然存在于内存中, activity 的所有信息和状态数据不会消失, 当 activity 重新回到前台之后,所有的改变都会得到保留


//用于记录位置@Override

public void onSaveInstanceState(@NonNull Bundle outState) {

super.onSaveInstanceState(outState);

//获取recycler的管理器

    LinearLayoutManager layoutManager =  ((LinearLayoutManager)binging.newsRecyclerView.getLayoutManager());

//获取当前第一个显示的item

    int fistVisiblePosition =  layoutManager.findFirstVisibleItemPosition();

//按位置查找视图

    View itemView = layoutManager.findViewByPosition(fistVisiblePosition);

//当滑动的时候有的页面没有被销毁还在  如过调用就是空  所以加次判断

    if(itemView ==null){

return;

}

//获取当前位置的Y

    int y = (int) itemView.getY();

//记录位置

    outState.putInt("position",fistVisiblePosition);

outState.putInt("offset",y);

}


@Override

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//在创建fragment的时候调用还不可见时就进行复位

    if(savedInstanceState !=null){

targetPosition = savedInstanceState.getInt("position");

targetOffset = savedInstanceState.getInt("offset");

}}


当然这些还不够

//滚动到获取位置 让刚退出的可见位置恢复到Y坐标

//为什么在请求的数据第一次的时候那,因为当滑动多的时候他请求的数据会被销毁,所以会二次请求

scrollToTargetPosition();


//滚动到获取位置 让刚退出的可见位置恢复到Y坐标

private void scrollToTargetPosition() {

binging.newsRecyclerView.post(new Runnable() {

@Override

        public void run() {

//获得管理器

            LinearLayoutManager layoutManager = (LinearLayoutManager)binging.newsRecyclerView.getLayoutManager();

//获取当前第一个显示的item

            int position = layoutManager.findFirstVisibleItemPosition();

//如过他当前的位置和记录的位置不一样

            if(position !=targetPosition){

//滚动到获取位置(标识的位置,标识的偏移量)

                layoutManager.scrollToPositionWithOffset(targetPosition,targetOffset);

}

}

});

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。