如何解决Android Studio 不呈现布局 简介我想要什么我做了什么,发生了什么我尝试做的代码
我目前正在开发一个 android 应用程序,但遇到了一个我自己无法解决的问题。
简介
我创建了一个新项目并选择了“标签式活动”作为该项目的模板。如您所知,使用此模板创建的项目有 2 个 .xml 文件:activity_main.xml(包含 AppBarLayout 和 ViewPager2) 和 fragment_main.xml。它还设置了 MainActivity.kt 以使选项卡工作,并且 ui.main 包中包含 3 个 .kt 文件,这些文件负责显示标签内容,例如“片段#1”等
我想要什么
我需要应用程序具有带有标题、徽标和标签导航的顶部操作栏。总的来说,我需要有 3 个不同的标签(片段),它们有自己的布局和逻辑。
我做了什么,发生了什么
因此,我自定义了 activity_main.xml 布局,然后为我想要在申请。
我删除了自动生成的代码并编写了自己的代码。由于我主要是作为 android 开发的初学者,我使用 google 学习如何绑定 tabs、fragments 和主要 activity一起。我找到了几篇我认为适合我的文章。
完成代码后,我想检查一下我的带有标签的自定义操作栏和半完成的 fragment_dashboard.xml 布局如何结合在一起。
所以我尝试运行该应用程序并遇到了问题:当应用程序在模拟手机中启动时,只有一个白屏,没有其他任何东西......(在删除自动生成的标签代码之前,它运行没有任何问题)
我尝试做的
首先我尝试调试MainActivity.kt。我在函数的第一行放置了一个断点 onCreate():
super.onCreate(savedInstanceState,persistentState)
但是当我在调试模式下运行应用程序时,调试器不会在这个断点处停止。因此,我得出了一个结论:执行甚至没有到达函数 onCreate()。
那么,问题是:我做错了什么,我该如何修复才能看到标签及其片段?
代码
DashboardFragment.kt
class DashboardFragment() : Fragment() {
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_dashboard,container,false);
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
Log.i("DashboardFragment","onViewCreated")
super.onViewCreated(view,savedInstanceState)
}
}
ViewPagerFragmentStateAdapter.kt
class ViewPagerFragmentStateAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
var positionToPageName = mapOf(
0 to "Dashboard"
)
private var _pageNametoFragment = mapOf<String,Fragment>(
"Dashboard" to DashboardFragment()
)
override fun getItemCount(): Int = _pageNametoFragment.size
override fun createFragment(position: Int): Fragment {
val pageName = positionToPageName[position]
val page = _pageNametoFragment[pageName]
return page ?: DashboardFragment() as Fragment
}
}
ViewPagerFragmentStateAdapter.kt
class MainActivity : AppCompatActivity() {
private lateinit var tabLayout: TabLayout
private lateinit var viewPager: ViewPager2
override fun onCreate(savedInstanceState: Bundle?,persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState,persistentState)
setContentView(R.layout.activity_main)
val adapter = ViewPagerFragmentStateAdapter(this)
viewPager = findViewById(R.id.view_pager)
viewPager.adapter = adapter
tabLayout = findViewById(R.id.tabs)
TabLayoutMediator(tabLayout,viewPager) {
tab,position -> tab.text = adapter.positionToPageName[position]
}.attach()
}
}
解决方法
我尝试更改 MainActivity.kt 中的一些内容。问题似乎只是在 onCreate() 函数的定义中:
override fun onCreate(savedInstanceState: Bundle?,persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState,persistentState)
我再次使用“Tabbed Activity”模板创建了一个测试项目,并注意到在新项目中缺少 persistentState 参数。所以,我刚刚从我的项目中的定义中删除了它,项目开始运行良好。
现在 onCreate() 的定义如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。