美文网首页Android开发碎碎片
安卓保存数据之onsaveInstanceStace(Bundl

安卓保存数据之onsaveInstanceStace(Bundl

作者: 2fab4u | 来源:发表于2019-05-11 14:58 被阅读26次

当安卓设备配置【一系列特征的组合:屏幕方向,屏幕像素密度,屏幕尺寸,键盘类型,底座模式,以及语言等】发生改变时,可能会有更合适的资源来匹配新的设备环境。

于是,Android会销毁当前activity,为新配置寻找最佳资源,然后重启这个activity。

比如: 当前是竖屏,现在我mainActivity是一个ListView填充,当我滑动一定距离后,我不小心点到了屏幕旋转,即竖屏变为了横屏。然后问题来了,手机变为竖屏后,listview的item又回到最开始的地方。原因是因为,当屏幕方向改变,mainactivity先destroy,然后再onCreate,可以重写onDestroy(), onCreate()然后打Log.d的tag验证。

解决方法:

在onStop()方法回调之前,系统会自动调用onSaveInstanceState(Bundle outState),除非用户按返回键(记住,按返回键就是告诉Android,activity用完了,随后该activity就完全从内存中被抹掉,自然也就没有必要为重建保存数据)。

我们重写

onSaveInstanceState(Bundle outstate){
    super.onSaveInstanceState(outstate);
    outstate.putInt("key",currentPosition);
}

这样,当屏幕旋转时,会回调上面的函数,然后将当前ListView的position保存在key中,之后我们可以在onCreate(Bundle savedInstance)中拿到
如下:

public void onCreate(Bundle savedInstance){
    super.onCreate();
    if(savedInstance != null){
        int position = savedInstance.getInt("key");
}
}

这样就可以拿到之前的position位置,然后listview定位到取出来的position即可。

相关文章

  • 安卓保存数据之onsaveInstanceStace(Bundl

    当安卓设备配置【一系列特征的组合:屏幕方向,屏幕像素密度,屏幕尺寸,键盘类型,底座模式,以及语言等】发生改变时,可...

  • 安卓 数据保存方式

    从方式来说,有四种;从保存地方来说,有三种。方式分类法: SQliteSQLite是一个轻量级的数据库,支持基本S...

  • 关于安卓保存图片到本地后,系统相册不显示问题

    问题:对于安卓保存到本地后,系统相册不显示。 原因:虽然文件已经保存到本地,但是图库的数据记录并没有该图片,所以需...

  • iPhone壁纸:6.20苹果高清壁纸

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • iPhone壁纸:文字锁屏壁纸

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • 壁纸:08-18今日高清唯美壁纸

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • iPhone壁纸:无水印壁纸

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • iPhone壁纸:7.5苹果高清壁纸

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • iPhone壁纸 : 抖音动漫原图

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

  • iPhone壁纸 : 高清壁纸原图

    长按保存 点击放大 iPhone手机壁纸(苹果(安卓)壁纸)保存方法:点击图片-长按图片-保存图片,保存完毕返回...

网友评论

    本文标题:安卓保存数据之onsaveInstanceStace(Bundl

    本文链接:https://www.haomeiwen.com/subject/aqmxaqtx.html