Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin

Android横竖屏切换configChanges="screenSize|orientation"避免activity销毁重建,Kotlin

 

如果不在Androidmanifest.xml设置activity的:

android:configChanges="screenSize|orientation"

那么,每次横竖屏切换activity都会重新走onCreate() ... onDestory()生命周期,即销毁重建。如果设置了上面的配置后,每次横竖屏切换,activity只是回调:

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
      
    }

而不再走或触发activity的创建-消耗重的生命周期。

import android.content.res.Configuration
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.UUID

const val ITEM_COUNT = 300

class MainActivity : AppCompatActivity() {
    private var mAdapter: MyAdapter? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("fly", "onCreate")

        setContentView(R.layout.activity_main)

        val rv = findViewById<RecyclerView>(R.id.rv)
        val layoutManager = GridLayoutManager(this, 3)
        rv.layoutManager = layoutManager

        mAdapter = MyAdapter()
        rv.adapter = mAdapter
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("fly", "onDestroy")
    }

    class MyAdapter : RecyclerView.Adapter<MyVH> {
        private var mList = mutableListOf<MyItem>()

        constructor() {
            val list = mutableListOf<MyItem>()
            for (i in 0 until ITEM_COUNT) {
                val item = MyItem(i)
                item.data = 0L
                item.change = false
                list.add(item)
            }
            mList = list
        }

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVH {
            val view = LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_2, parent, false)
            return MyVH(view)
        }

        override fun getItemCount(): Int {
            return mList.size
        }

        override fun onBindViewHolder(holder: MyVH, position: Int) {
            holder.text1.text = "pos=${mList[position].pos}"
            holder.text2.text = "data=${mList[position].data}"
        }
    }

    class MyVH(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val text1: TextView = itemView.findViewById(android.R.id.text1)
        val text2: TextView = itemView.findViewById(android.R.id.text2)
    }

    class MyItem {
        var pos = 0
        var data = 0L
        var contentId = UUID.randomUUID()
        var change = false

        constructor(pos: Int) {
            this.pos = pos
        }

        constructor() : this(0) {
        }
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Log.d("fly", "onConfigurationChanged")
    }
}

启动后,滑动到pos=30:

f96ca09c91714b89945afdf9645267e9.png

 

横竖屏切换,可以看到,Android自动在切换后把位置滚动到pos=30,无须recycleview再做滚动计算和调整:

cfd197bf59f54607add75828fb46765f.png

 

日志:

ab6d4d33488e4076af7c8fc2e1218fad.png

 

 

 

Android重写onConfigurationChanged规避横竖屏切换时候重新进入onCreate生命周期-CSDN博客文章浏览阅读2.1k次。Android重写onConfigurationChanged规避横竖屏切换时候重新进入onCreate生命周期Android系统内在的机制,当activity在横竖屏切换时候,会强制重新开始进入activity的生命周期onCreate,在有些特殊的场景,开发者不希望重新进入onCreate生命周期,那么,可以通过重写Android的onConfigurationChanged规避。_onconfigurationchangedhttps://blog.csdn.net/zhangphil/article/details/50607742

 

相关推荐

  1. Android 横竖切换 窗口全

    2024-02-23 16:54:01       40 阅读
  2. Android Activity切换动画多种实现方式

    2024-02-23 16:54:01       17 阅读
  3. Android : ViewModel_解决textView 横竖数据丢失

    2024-02-23 16:54:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 16:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 16:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 16:54:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 16:54:01       20 阅读

热门阅读

  1. Jmeter 学习目录(0)

    2024-02-23 16:54:01       32 阅读
  2. PyTorch中保存模型的两种方式

    2024-02-23 16:54:01       26 阅读
  3. Cpython和Jpython区别

    2024-02-23 16:54:01       29 阅读
  4. 中国工业废水处理行业报告

    2024-02-23 16:54:01       24 阅读
  5. Asp.Net web 文件服務快速搭建

    2024-02-23 16:54:01       22 阅读
  6. 【机器学习】机器学习是什么?

    2024-02-23 16:54:01       28 阅读
  7. SQL中为什么不要使用1=1

    2024-02-23 16:54:01       28 阅读
  8. HW面试常见知识点(新手认识版)

    2024-02-23 16:54:01       29 阅读
  9. android recyclerview 中的animation滚动中动画停止了?

    2024-02-23 16:54:01       30 阅读
  10. Android自编译Pixel3内核加入KernelSU

    2024-02-23 16:54:01       33 阅读
  11. 配置docker 支持GPU方法(Nvidia GPU)

    2024-02-23 16:54:01       32 阅读