Saya menggunakan yang baru android.support.design.widget.BottomNavigationView
dari pustaka dukungan. Bagaimana cara mengatur pilihan saat ini dari kode? Saya menyadari, bahwa pemilihan diubah kembali ke item pertama, setelah layar diputar. Tentu saja ini juga akan membantu, jika seseorang dapat memberi tahu saya, bagaimana cara "menyimpan" status saat ini BottomNavigationView
dalam onPause
fungsi tersebut dan cara memulihkannya onResume
.
Terima kasih!
android
bottomnavigationview
Michael
sumber
sumber
BottomNavigationView
tidak melakukan penyimpanan internal negara. Mungkin berharap ini disertakan dalam pembaruan di masa mendatang. Gandakan (dengan beberapa info lebih lanjut) di sini: stackoverflow.com/questions/40236786/…Jawaban:
Dari API 25.3.0 diperkenalkan metode
setSelectedItemId(int id)
yang memungkinkan Anda menandai item sebagai dipilih seolah-olah telah disadap.Dari dokumen:
Contoh kode:
PENTING
Anda HARUS sudah menambahkan semua item ke menu (jika Anda melakukan ini secara terprogram) dan menyetel Listener sebelum memanggil setSelectedItemId (Saya yakin Anda ingin kode di listener Anda dijalankan saat memanggil metode ini). Jika Anda memanggil setSelectedItemId sebelum menambahkan item menu dan menyetel listener, tidak akan ada yang terjadi.
sumber
onTabSelected
jelas, itu tidak akan melakukan apa-apa. Baca dokumen -> Setel ID item menu yang dipilih. Ini berperilaku sama seperti mengetuk item. Ini dari Pengembang AndroidUntuk mengklik secara terprogram pada item BottomNavigationBar, Anda perlu menggunakan:
Ini mengatur semua item dengan labelnya dengan benar.
sumber
Bagi mereka yang masih menggunakan SupportLibrary <25.3.0
Saya tidak yakin apakah ini adalah jawaban lengkap untuk pertanyaan ini, tetapi masalah saya sangat mirip - saya harus memproses
back
penekanan tombol dan membawa pengguna ke tab sebelumnya di mana dia berada. Jadi, mungkin solusi saya akan berguna untuk seseorang:Harap diingat bahwa jika pengguna menekan tab navigasi lain
BottomNavigationView
tidak akan menghapus item yang saat ini dipilih, jadi Anda perlu memanggil metode ini dalam AndaonNavigationItemSelected
setelah memproses tindakan navigasi:Mengenai penyimpanan status instance, saya pikir Anda dapat bermain dengan
action id
tampilan navigasi yang sama dan menemukan solusi yang sesuai.sumber
Menu menu = bottomNavigationView.getMenu();
mengembalikan salinan menu, jadibottomNavigationView
objek tidak terpengaruh?di mana
action_item1
ID item menu.sumber
sumber
Sekarang dimungkinkan sejak versi 25.3.0 untuk memanggil
setSelectedItemId()
\ o /sumber
Tambahkan
android:enabled="true"
ke Item BottomNavigationMenu.Dan kemudian atur
bottomNavigationView.setOnNavigationItemSelectedListener(mListener)
dan atur sebagai dipilih dengan melakukanbottomNavigationView.selectedItemId = R.id.your_menu_id
sumber
Ini mungkin akan ditambahkan dalam pembaruan yang akan datang. Tetapi sementara itu, untuk mencapai ini Anda bisa menggunakan refleksi.
Buat tampilan kustom yang diperluas dari BottomNavigationView dan akses beberapa bidangnya.
Dan kemudian gunakan di file layout xml Anda.
sumber
Hanya menambahkan cara lain untuk melakukan seleksi secara terprogram - ini mungkin yang menjadi niat awalnya atau mungkin ini ditambahkan nanti.
The
performIdentifierAction
mengambilMenu
barang id dan bendera.Lihat dokumentasi untuk info lebih lanjut.
sumber
Tampaknya diperbaiki di SupportLibrary 25.1.0 :) Edit: Tampaknya sudah diperbaiki, bahwa status pilihan disimpan, saat memutar layar.
sumber
Di atas API 25 Anda dapat menggunakan setSelectedItemId (menu_item_id) tetapi di bawah API 25 Anda harus melakukan hal yang berbeda, Menu pengguna untuk mendapatkan pegangan dan kemudian setChecked untuk Memeriksa item tertentu
sumber
Gunakan ini untuk menyetel item menu navigasi bawah yang dipilih berdasarkan id menu
sumber
Jika Anda tidak ingin mengubah kode Anda. Jika demikian, saya merekomendasikan Anda untuk mencoba BottomNavigationViewEx。
Anda hanya perlu mengganti panggilan metode
setCurrentItem(index);
dangetCurrentItem()
。sumber
menggunakan
sumber
Saya membuat bug ke Google tentang fakta bahwa tidak ada cara yang dapat diandalkan untuk memilih halaman di BottomNavigationView: https://code.google.com/p/android/issues/detail?id=233697
NavigationView tampaknya memiliki masalah serupa, yang mereka perbaiki dengan menambahkan metode setCheckedItem () baru.
sumber
Anda dapat mencoba metode performClick:
sumber
Satu-satunya 'minus' dari solusi yang digunakan
MenuItemImpl
, yaitu 'internal' ke perpustakaan (meskipun publik).sumber
JIKA ANDA PERLU SECARA DINAMIS MELALUI ARGUMEN Fragmen LAKUKAN INI
Ada banyak jawaban (kebanyakan berulang atau kedaluwarsa) di sini tetapi tidak ada yang menangani kebutuhan yang sangat umum: meneruskan argumen berbeda secara dinamis ke Fragmen yang dimuat ke tab .
Anda tidak dapat secara dinamis meneruskan argumen yang berbeda ke Fragmen yang dimuat dengan menggunakan
setSelectedItemId(R.id.second_tab)
, yang akhirnya memanggil statisOnNavigationItemSelectedListener
. Untuk mengatasi batasan ini saya akhirnya melakukan ini di sayaMainActivity
yang berisi tab:The
ArticleFragment.newInstance()
Metode diimplementasikan seperti biasa:sumber
saya harap ini membantu
Ini lebih menentukan fragmen default yang dimuat pada saat yang sama dengan item menu navigasi bawah yang sesuai. Anda dapat menyertakan hal yang sama dalam callback OnResume Anda
sumber
Metode ini berhasil untuk saya.
sumber
Refleksi adalah ide yang buruk.
Kepala ke inti ini . Ada metode yang melakukan pemilihan tetapi juga memanggil callback:
sumber
callOnClick()
alih-alihperformClick()
, dengan cara ini saya tidak perlu menonaktifkan suara, yangperformClick()
toh tidak berfungsi .