首页 > 解决方案 > Kotlin Android 依次显示几个已定义的布局活动

问题描述

我继承了一段代码,并希望将应用程序中已经设计的所有布局活动视为许多 xml 文件。是的,我知道我可以在 AS 中查看它们,但我想在我拥有的智能手机的真实屏幕上查看它们。我可以看到 2 个这样设计的布局活动,但它不允许看到 3 个、4 个或更多......,不知道为什么......在这里尝试了几种可能性,到目前为止没有解决方案。

package com.explore.appviews

import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.appcompat.app.AppCompatActivity
import java.util.*
import kotlin.concurrent.schedule

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first_launch)


        Handler(Looper.getMainLooper()).postDelayed({
         // setContentView(R.layout.activity_fullscreen_image_viewer)
         setContentView(R.layout.activity_login)
        }, 3000)

        Handler(Looper.getMainLooper()).postDelayed({
            setContentView(R.layout.activity_fullscreen_image_viewer)
         //   setContentView(R.layout.activity_login)
        }, 3000)

    }
}

标签: androidandroid-layoutkotlin

解决方案


我不知道这是否是您的问题的原因,但您将在未来 3 秒内排队两次布局更改,即在完全相同的时间。所以第一个将显示,并立即被第二个替换。你可能看到了first_launch,然后三秒钟后fullscreen_image_viewer

您可能应该只列出所有布局资源的列表,然后发布一个显示列表中下一个的延迟任务,如果还有更多,则发布一个新的延迟任务

class MainActivity : AppCompatActivity() {
    val layouts = listOf(
        R.layout.activity_first_launch,
        R.layout.activity_login,
        R.layout.activity_fullscreen_image_viewer
    )

    var nextLayout = 0
    val handler = Handler(Looper.getMainLooper())

    fun showNext() {
        // if we've hit the end, this skips and ends the posting cycle
        if (nextLayout < layouts.size) {
            setContentView(layouts[nextLayout])
            nextLayout++
            // run this function again in 3 seconds
            handler.postDelayed(::showNext, 3000)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        showNext()
    }
}

或者 aStack会更整洁,不需要跟踪当前位置并检查列表的边界


推荐阅读