tombol kembali khusus - Navigasi Android

Saya memiliki formulir dan ingin mendapatkan pesan konfirmasi dari pengguna sebelum pengguna meninggalkannya.

saya ingin memberikan tombol kembali khusus ketika pengguna menyentuh tombol ini:

tombol kembali navigasi android

saya mencoba ini:

val onBackPressedCallback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
            }
        }
requireActivity().onBackPressedDispatcher.addCallback(this,onBackPressedCallback)

tetapi sepertinya hanya berfungsi untuk menyediakan perilaku kembali khusus ke tombol kembali perangkat lunak/perangkat keras bawaan dan bukan tombol panah kembali

Bagaimana saya bisa melakukan ini?


person peyman    schedule 13.10.2019    source sumber
comment
di java kami melakukannya seperti ini stackoverflow.com/questions/36457564/, cukup konversikan ke kotlin.   -  person L2_Paver    schedule 14.10.2019


Jawaban (3)


Gunakan onSupportNavigateUp, dan ganti yourCurrentFragmentID dengan id fragmen Anda saat ini. Semua ini harus dilakukan di MainActivity.

 navController = findNavController(R.id.nav_host_fragment)

 setupActionBarWithNavController(navController!!)

 override fun onSupportNavigateUp(): Boolean {
        return when(navController?.currentDestination?.id) {
            R.id.yourCurrentFragmentID -> {
                showDialog()
                true
            }
            else -> navController?.navigateUp()!!
        }
    }

Edit

Jika fragmen Anda sudah menggunakan onOptionsItemSelected, Anda dapat menangani logikanya dengan mencentang itemId.

 override fun onOptionsItemSelected(item: MenuItem): Boolean {
        val id = item.itemId
        if (id == R.id.save) {
           // your save button code logic 
        }else if(id ==android.R.id.home){ 
            // display confirmation message
        }
        return super.onOptionsItemSelected(item)
    }
person John Joe    schedule 14.10.2019
comment
terima kasih, ini tombol pegangan kembali tetapi Apa yang harus saya lakukan jika saya ingin melakukan beberapa operasi yang memerlukan informasi bentuk fragmen? - person peyman; 14.10.2019
comment
maksud Anda Anda ingin meneruskan informasi fragmen ke pesan konfirmasi? - person John Joe; 14.10.2019
comment
ya, misalnya menampilkan beberapa data dalam dialog atau menjalankan fungsi yang memerlukan data berbentuk fragmen - person peyman; 14.10.2019
comment
terima kasih, ini yang saya inginkan dan tandai sebagai jawaban yang benar. bisakah saya berhenti menjalankan navController.navigateUp() dalam fragmen. saya bisa navigateUp dengan findNavController().navigateUp() tetapi bagaimana cara menghentikannya? - person peyman; 14.10.2019
comment
Maaf, itu kesalahan dari saya. Saya harus menggunakan kode untuk mencegah eksekusi navigasi yang Anda posting sebelumnya :) - person peyman; 14.10.2019
comment
Anda sebenarnya dapat mengabaikan jawaban pertama saya. Gunakan jawaban kedua yang cukup baik untuk melanjutkan. - person John Joe; 14.10.2019
comment
maksud saya, saya harus menonaktifkan navigateUp untuk fragmen ini di` aktivitas` karena ketika saya mengklik dialog back arrow icon ditampilkan dan saya kembali ke fragmen sebelumnya sementara dialog masih ada. jika saya ingin tetap berada di fragmen saat ini saya harus menonaktifkan navigateUp atau dapatkah dilakukan dalam fragmen? - person peyman; 14.10.2019
comment
Kembalikan ke fragmen sebelumnya jika tombol ok dalam dialog ditekan. Kalau tidak, buatlah itu tetap di fragmen saat ini. - person John Joe; 15.10.2019

Gunakan kode ini untuk menyetel Aktivitas pada backpress.

override fun onBackPressed() {
        if (isDiscardChanges) {
            discardDialog()
        } else {

            super.onBackPressed()
        }
    }
person Chintan    schedule 14.10.2019

Jika Anda hanya ingin kembali dari Aktivitas, Anda dapat menambahkan Aktivitas kelas anak AndroidManifest.xml.

android:parentActivityName="Parent_Activity_Name 
person rachna    schedule 14.10.2019