You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用Activity不显示问题求助(使用View Binding)

解决OnBoardingActivity内容为空无法显示的问题

你的Activity内容为空的核心原因是重写了错误的onCreate重载方法。你当前重写的是onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?),但Android系统默认调用的是仅带Bundle参数的onCreate(savedInstanceState: Bundle?),导致所有布局初始化、ViewPager配置代码都未执行,自然看不到任何内容。

需要修正的关键问题

  1. 替换OnBoardingActivity的onCreate方法签名为系统默认调用的重载
  2. 修复指示器关联ViewPager2时的适配器类名错误

修改后的核心代码

class OnBoardingActivity : AppCompatActivity() {
    private val binding by viewBinding(ActivityOnboardingBinding::inflate)

    inner class Step(
        val action: () -> Unit = ::navigateNext,
        @StringRes val actionText: Int = R.string.action_settings,
        @DrawableRes val actionDrawable: Int = R.drawable.ic_arrow_12,
        val createFragment: () -> Fragment
    )

    private val steps = mutableListOf<Step>()

    private fun initSteps() {
        val dottedSteps = listOf(
            bundleOf(
                OnBoardingStep.TITLE to R.string.app_name,
                OnBoardingStep.DESC to R.string.next
            ),
            bundleOf(
                OnBoardingStep.TITLE to R.string.next,
                OnBoardingStep.DESC to R.string.app_name
            ),
        )

        dottedSteps.forEach {
            steps += Step {
                OnBoardingStep().apply {
                    arguments = it
                }
            }
        }
    }

    inner class PagerAdapter : FragmentStateAdapter(this) {
        override fun getItemCount(): Int = steps.size
        override fun createFragment(position: Int): Fragment = steps[position].createFragment()
    }

    private fun navigateNext() = with(binding.pager) {
        if (currentItem + 1 == adapter?.itemCount)
            finish()
        else setCurrentItem(currentItem + 1, true)
    }

    // 修正onCreate方法签名,移除persistentState参数
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        initSteps()

        with(binding) {
            // 修正适配器引用,使用自定义的PagerAdapter
            shapePageIndicator.setCustomViewPagerAdapter(PagerAdapter())
            pager.adapter = PagerAdapter()
            pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                override fun onPageSelected(position: Int) {
                    val step = steps[position]
                    nextButton.setOnClickListener { step.action() }
                    nextButton.setText(step.actionText)
                    nextButton.setEndDrawable(step.actionDrawable)
                }
            })
        }
    }

    override fun onBackPressed() = with(binding.pager) {
        if (currentItem > 0)
            currentItem -= 1
        else super.onBackPressed()
    }
}

额外检查项

  • 确保fragment_onboarding_step.xml布局文件中存在title和description两个TextView控件,否则Fragment中的绑定会抛出异常
  • 确认StretchPageIndicator的setCustomViewPagerAdapter方法支持接收FragmentStateAdapter类型参数(你的自定义PagerAdapter已继承该类,可正常兼容)

内容的提问来源于stack exchange,提问作者Drics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:20:19