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

     

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

  • 相关阅读:
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    C语言控制台窗体图形界面编程(总结)
    linux下c程序 daemon、fork与创建pthread的顺序问题
    内存动态分配与释放
    MyReport报表系统v1.2公布
    AutoLayout初战----Masonry与FDTemplateLayoutCell实践
    算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
    药店从业者,不能不知的数据分析方法
    药店从业者,不能不知的数据分析方法
    SAS之大话PDV
  • 原文地址:https://www.cnblogs.com/victorywr/p/14017233.html
Copyright © 2011-2022 走看看