zoukankan      html  css  js  c++  java
  • android屏幕旋转切换控件布局及数据的暂存

    首先如何实现竖屏和横屏下不同的控件布局

    1、在activity_main.xml文件的布局窗口找到create landscape variation,就是创建另一个横屏的布局文件

     2、在工程目录看到多了一个activity_main.xml文件,在这里进行横屏情况下的控件布局

    3、如下图所示为两种布局,按键分别是三行两列,两行三列分布

                      

     4、监听button1,按下按钮1后将上方的Textview显示由welcome变为button1,并重写ondestroy函数,调用destroy函数时打印相关信息

    测试 屏幕旋转时 Textview显示的变化以及destroyed在何时会被调用

     

     从左至右依此是开始界面->按下button1后显示界面->旋转后界面    

    测试发现每次旋转屏幕,都会调用一次destroy函数,说明旋转屏幕会导致程序的销毁,再重新开始一个新的程序,这也就意味着旋转后界面上的显示信息无法得到保存,所以图二到图三可以看到Textview的显示内容由button1变为了welcome就是这个原因。

    5、如何保证在旋转屏幕后显示界面的信息依旧不改变?

     if(savedInstanceState!=null)        //需要先判断是否为空,不为空代表有历史数据保存需要进行数据复原,否则会引起空指针异常
            { 
                String s=savedInstanceState.getString("key");     //savedInstanceState存放的Bundle信息实际就是从outState而来
               textView.setText(s);
            }
    
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    textView.setText(R.string.button1);
                }
            });
        }
    
        @Override   //不过这种方式保存数据只是临时保存,无法永久保存
        protected void onSaveInstanceState(@NonNull Bundle outState) {  //该函数用于提取出历史数据,保存到outState中
            super.onSaveInstanceState(outState);
            outState.putString("key",textView.getText().toString());//将textview中的内容存放在键值为KEY的字符串中,最终会存为一个Bundle
        }

    调用onSaveInstanceState函数,可以暂时保存要保持的历史数据,在程序运行后判断savedInstanceState是否为空,对数据进行复原显示,不过这种方式只是暂时的保存了历史数据,不过应用到屏幕旋转中也能解决数据丢失的问题。

     

    这样旋转屏幕后数据依旧不会改变。

  • 相关阅读:
    6 原型模式
    10 观察者模式
    4 代理模式
    写错误日志
    C#事件的使用
    将int型数字转换成7位字符串,不足的时候,前面补0
    Excel 2010导数据到SQL SERVER 2008
    jquery checkbox
    修改注册表开启IE跨域访问功能
    存储过程一例
  • 原文地址:https://www.cnblogs.com/victorywr/p/14017233.html
Copyright © 2011-2022 走看看