Как получить доступ к другому фрагменту из фрагмента в Android с помощью Kotlin? - PullRequest
0 голосов
/ 10 июля 2020
  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()

Я хочу go Домашний фрагмент, когда пользователь нажимает кнопку «Нет». Меня перенаправляют к домашнему фрагменту, но диалоговое окно не исчезает, и когда я снова нажимаю кнопку «Нет», приложение вылетает, давая исключение нулевого указателя в строке:

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

Как удалить диалоговое окно когда я доберусь до домашнего фрагмента? Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Дело в том, что в качестве параметров для прослушивателей кликов вы получаете объект DialogInterface. У этого объекта есть метод dismiss(). Вам нужно вызвать его, чтобы закрыть диалоговое окно.


 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"){dlgInterface: DialogInterface,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"

        dlgInterface.dismiss()
        
    }
    dialog.create()
    dialog.show()

Также, пожалуйста, прекратите использовать принудительное развертывание !!. Kotlin имеет этого мага c безопасного разворачивания ? и спасает жизни. Используйте это;)

0 голосов
/ 10 июля 2020

Позвоните 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()
...