Android应用Activity不显示问题求助(使用View Binding)
解决OnBoardingActivity内容为空无法显示的问题
你的Activity内容为空的核心原因是重写了错误的onCreate重载方法。你当前重写的是onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?),但Android系统默认调用的是仅带Bundle参数的onCreate(savedInstanceState: Bundle?),导致所有布局初始化、ViewPager配置代码都未执行,自然看不到任何内容。
需要修正的关键问题
- 替换
OnBoardingActivity的onCreate方法签名为系统默认调用的重载 - 修复指示器关联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
相关产品推荐
相关产品推荐

