• 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是否为空,对数据进行复原显示,不过这种方式只是暂时的保存了历史数据,不过应用到屏幕旋转中也能解决数据丢失的问题。

     

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

  • 相关阅读:
    undefined与null
    php中实现MVC的思想
    jquery返回json格式数据来获取每天的天气预报
    在php.ini中safe_mode开启之后对于PHP系统函数有什么影响呢?
    PHP的垃圾收集机制是怎样的
    javascript图片预加载技术
    web标准
    javascript简介
    javascript中的四种循环语句
    那些年,我还在学习C#
  • 原文地址:https://www.cnblogs.com/victorywr/p/14017233.html
Copyright © 2020-2023  润新知