首页 > 解决方案 > 如何使用 Kotlin 从 Android 中的片段访问另一个片段?

问题描述

  val dialog = AlertDialog.Builder(activity as Context)
    dialog.setTitle("Confirmation")
    dialog.setMessage("Are you sure you want to log out?")
    dialog.setPositiveButton("YES"){ text, listener ->
        sharedPreferences.edit().clear().apply()
        println("Shared preferences cleared")
        println("Logged out")
        val intent =  Intent(activity as Context, LoginActivity::class.java)
        startActivity(intent)
    }
    dialog.setNegativeButton("NO"){text,listener ->
        
        val homeFragment = HomeFragment()
        val beginTransaction = activity!!.supportFragmentManager.beginTransaction()

        beginTransaction.replace(R.id.frameLayout, homeFragment)
        beginTransaction.commit()
        activity!!.navigationView.setCheckedItem(R.id.home_screen)
        println("Home title set")
        activity!!.actionBar!!.title = "Home"
        
    }
    dialog.create()
    dialog.show()

当用户单击“否”按钮时,我想去主页片段。我被定向到 Home Fragment,但对话框没有消失,当我再次单击“否”时,应用程序崩溃,并在该行出现空指针异常:

val beginTransaction = activity!!.supportFragmentManager.beginTransaction()

到达主页片段时如何删除对话框?请帮忙。

标签: androidkotlinandroid-fragmentsnullpointerexception

解决方案


dialog.dismiss();在提交事务之前调用
以及在移动到另一个活动之前

val builder = AlertDialog.Builder(activity as Context)
.setTitle("Confirmation")
.setMessage("Are you sure you want to log out?") 
.setPositiveButton("YES"){ dialog, _ -> 
    sharedPreferences.edit().clear().apply() 
    println("Shared preferences cleared")
    println("Logged out")
    dialog.dismiss()
    val intent = Intent(activity as Context, LoginActivity::class.java)
    startActivity(intent) 
} 
.setNegativeButton("NO"){dialog,_ ->
    val homeFragment = HomeFragment()  
    val beginTransaction = activity!!.supportFragmentManager.beginTransaction()
    beginTransaction.replace(R.id.frameLayout, homeFragment)
    dialog.dismiss()
    beginTransaction.commit()
    activity!!.navigationView.setCheckedItem(R.id.home_screen) 
    println("Home title set")     
    activity!!.actionBar!!.title = "Home"
 }
.show()

推荐阅读