当前位置: 首页 > 知识库问答 >
问题:

片段中的Kotlin RecolyerView-导航体系结构组件-空错误

岳出野
2023-03-14

html" target="_blank">调试错误

E/AndroidRuntime:致命异常:主进程:com.projects.arise.myTestApp,PID:28285 java.lang.RuntimeException:无法启动activity ComponentInfo{com.projects.arise.myTestApp/com.projects.arise.myTestApp.MainActivity}:java.lang.IllegalStateException:rview_keys在Android.app.ActivityThread.PerformLaunchActivity(ActivityThread.java:2817)在Android.app.ActivityThread.HandleLaunchActivity(m.projects.arise.mytestapp.mainactivity.onCreate(mainactivity.kt:55),位于Android.app.activity.performCreate(activity.java:6975),位于Android.app.instrumentation.callactivityonCreate(instrumentation.java:1213),位于Android.app.activitythread.performLaunchActivity(activitythread.java:2770),位于Android.app.activitythread.handleLaunchActivity(activitythread.java:2892) 在android.app.activitythread.-wrap11(未知源:0) 在Android.app.ActivityThread$H.HandleMessage(ActivityThread.java:1593) 在android.os.handler.dispatchMessage(Handler.java:105) 在android.os.looper.loop(looper.java:164) 在android.app.activityThread.main(activityThread.java:6541) 在java.lang.Reflect.Method.Invoke(原生方法) 在com.android.internal.os.zygote$methodandargscaller.run(zygote.java:240) 在com.android.internal.os.zygoteinit.main(zygoteinit.java:767)

mainactivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val host: NavHostFragment = supportFragmentManager
                .findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return

        val navController = host.navController
        setupBottomNavMenu(navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
    }

    private fun setupBottomNavMenu(navController: NavController) {
        findViewById<BottomNavigationView>(R.id.navigation)?.let { bottomNavView ->
            NavigationUI.setupWithNavController(bottomNavView, navController)
        }
    }
}

FragmentKeys.kt

class FragmentKeys : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        setHasOptionsMenu(true)
        return inflater.inflate(R.layout.fragment_keys_layout, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        //val rview_keys: RecyclerView = findViewById(R.id.rview_keys)
        rview_keys.layoutManager = LinearLayoutManager(context)
        rview_keys.adapter = AdapterKeys(KeysListObjects.keys)
    }
}

我注释掉了上面的一行,因为我在“findViewByID”上得到了一个“unresolved reference”错误。这行似乎没有必要,因为它不在其他人的代码中。例如:Kotlin Android碎片回收视图和上下文问题

class AdapterKeys(val keys: List<KeysList>) : RecyclerView.Adapter<AdapterKeys.KeysViewHolder>() {

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

    override fun getItemCount() : Int {
        return keys.size
    } //override fun getItemCount() = keys.size

    override fun onBindViewHolder(holder: KeysViewHolder, position: Int) {
        val keysList = keys[position]
        holder.setData(keysList, position)
    }

    inner class KeysViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun setData(keysList: KeysList?, position: Int) {
            itemView.tview_Keys.text = keysList!!.keysText
        }
    }
}
object KeysListObjects {
    val keys = listOf<KeysList>(
            KeysList("Testing1"),
            KeysList("Testing2"),
            KeysList("Testing3")
    )
}

共有1个答案

逑彬炳
2023-03-14

您将得到错误,因为您注释了以下内容

//val rview_keys:RecyclerView=findViewById(r.id.rview_keys)

没有将rview_keys声明为变量。因此它将rview_keys视为一个视图,因为在您的活动中有一个id为rview_keys的视图。

 类似资料:
  • 我正在我的应用程序中尝试导航架构组件。早些时候,我使用片段事务来实现以下功能。基本上,我想从导航。 碎片- 如果我正在使用导航组件并尝试 然后结果是FragmentA被FragmentB替换并且背景片段不可见。 我想知道一个解决方案,如果导航架构组件允许的话。 附言:我听说过嵌套导航主机,但从内部使用它好吗。 更新: FragmentB将有进一步交易的行动,例如: 碎片- 当用户按下后退按钮时,片

  • 是否可以将新的导航架构组件与DialogFragment一起使用?我必须创建自定义导航器吗? 我很乐意将它们与导航图中的新功能结合使用。

  • 我有如下的屏幕,其中包含一个导航抽屉和底部导航在同一个屏幕上: 我正在使用Jetpack导航架构组件。 当前问题和我尝试了什么? 单击第二个和第三个底部导航项目会在工具栏上显示返回箭头吗? 已尝试:将与第二和第三底部导航相关联的片段设置为顶级目的地 代替 不起作用。 任何帮助高度赞赏! 我的代码如下所示。 activity_main.xml menu_bottom.xml nav_graph.xm

  • null 在调用之前和之后,我尝试了,但都不起作用(这是有意义的:在它没有要弹出的内容之前;在它只关闭刚刚添加的片段之后)。这是否意味着唯一的方法是重写来拦截它,并确保在这些情况下不会被调用? 谢了!

  • 我正在探索上个月在Google I/O 2018中引入的“导航架构组件”概念。 假设我有一个带有底部导航视图和一个“片段”的活动来承载所有片段:- “我的导航”和“我的导航”将分别在A/B视图中显示“我的碎片”和“我的碎片”选项卡。FragmentB有一个嵌套的(子)片段FragmentC,可以从FragmentB打开。 在我的活动类中,我使用“setupWithNavController()”函