Bagaimana saya harus memilih tab di TabLayout secara terprogram?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Bagaimana saya harus memilih tab di TabLayout secara terprogram?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Jika Anda tahu indeks tab yang ingin Anda pilih, Anda dapat melakukannya seperti:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
TabLayout.Tab tab = tabLayout.getTabAt(someIndex);
tab.select();
Teknik ini berfungsi bahkan jika Anda menggunakan TabLayout dengan sendirinya tanpa ViewPager (yang tidak lazim, dan mungkin praktik yang buruk, tetapi saya telah melihatnya selesai).
TabLayout.Tab.select()
: "Pilih tab ini. Hanya valid jika tab telah ditambahkan ke panel tindakan."Inilah cara saya menyelesaikannya:
sumber
Gunakan ini:
sumber
Objects.requireNonNull(tabs.getTabAt(position)).select();
aman digunakanGunakan ini:
Setelah di OnClickListener:
sumber
Ini mungkin bukan solusi akhir , dan itu mengharuskan Anda menggunakan
TabLayout
bersama - sama denganViewPager
, tetapi ini adalah bagaimana saya menyelesaikannya:Saya menguji seberapa besar dampak kinerja dari penggunaan kode ini dengan pertama-tama melihat CPU- dan monitor memori di Android Studio sambil menjalankan metode ini, kemudian membandingkannya dengan beban yang diletakkan pada CPU dan memori ketika saya menavigasi antar halaman. sendiri (menggunakan gerakan gesek), dan perbedaannya tidak terlalu besar, jadi setidaknya itu bukan solusi yang mengerikan ...
Semoga ini bisa membantu seseorang!
sumber
tabLayout.setScrollPosition(pageIndex,0f,true);
), ketika saya mengklik tab di sebelah kanan, itu tidak memperbarui halaman ViewPager (saya tidak tahu mengapa). Hanya dengan mengklik kembali pada tab kiri & kemudian pada tab kanan lagi akhirnya akan memperbarui halaman untuk memiliki halaman tab kanan, yang sangat glitchy. Tetapi solusi ini tidak memiliki gangguan.Jika Anda tidak dapat menggunakan tab.select () dan Anda tidak ingin menggunakan ViewPager, Anda masih dapat memilih tab secara terprogram. Jika Anda menggunakan tampilan khusus melalui
TabLayout.Tab setCustomView(android.view.View view)
itu lebih sederhana. Inilah cara melakukannya dengan dua cara.Jika Anda tidak menggunakan tampilan khusus maka Anda dapat melakukannya seperti ini
Gunakan StateListDrawable untuk beralih antara drawables yang dipilih dan yang tidak dipilih atau yang serupa untuk melakukan apa yang Anda inginkan dengan warna dan / atau drawables.
sumber
Cukup atur
viewPager.setCurrentItem(index)
dan TabLayout terkait akan memilih tab masing-masing.sumber
Anda dapat mencoba menyelesaikannya dengan ini:
sumber
coba ini
sumber
Agak terlambat tapi mungkin solusi yang bermanfaat. Saya menggunakan TabLayout saya langsung di Fragmen saya dan mencoba untuk memilih tab cukup awal dalam Siklus Hidup Fragmen. Apa yang berhasil bagi saya adalah menunggu sampai TabLayout selesai menggambar pandangan anaknya dengan menggunakan
android.view.View#post
metode. yaitu:sumber
new Handler().postDelayed(()->{ tabLayout.post(() -> { tabLayout.getTabAt(myPosition).select(); }); },200);
Saya sedang menggunakan TabLayout untuk beralih fragmen. Ini berfungsi sebagian besar, kecuali setiap kali saya mencoba memilih tab menggunakan program
tab.select()
, sayaTabLayout.OnTabSelectedListener
akan memicuonTabSelected(TabLayout.Tab tab)
, yang akan menyebabkan saya banyak kesedihan. Saya mencari cara untuk melakukan seleksi terprogram tanpa memicu pendengar.Jadi saya mengadaptasi jawaban @kenodoggy untuk saya gunakan. Saya selanjutnya menghadapi masalah di mana beberapa objek internal akan mengembalikan nol (karena mereka belum dibuat, karena saya menjawab
onActivityResult()
dari fragmen saya, yang terjadi sebelumonCreate()
dalam kasus aktivitassingleTask
atausingleInstance
) jadi saya menulis detail jika / / Urutan lain yang akan melaporkan kesalahan dan gagal tanpaNullPointerException
yang sebaliknya akan memicu. Saya menggunakan Kayu untuk logging, jika Anda tidak menggunakan pengganti denganLog.e()
.Di sini, tabLayout adalah variabel memori saya terikat ke
TabLayout
objek di XML saya. Dan saya tidak menggunakan fitur tab gulir jadi saya menghapusnya juga.sumber
Anda harus menggunakan viewPager untuk menggunakan viewPager.setCurrentItem ()
sumber
tambahkan untuk viewpager Anda:
// pada penangan untuk mencegah kerusakan karena memori
sumber
Solusi gabungan dari jawaban yang berbeda adalah:
sumber
Dengan
TabLayout
disediakan oleh Perpustakaan Komponen Bahan hanya menggunakanselectTab
metode:Itu membutuhkan versi 1.1.0.
sumber
Secara default jika Anda memilih tab itu akan disorot. Jika Anda ingin memilih secara eksplisit berarti menggunakan kode komentar yang diberikan di bawah onTabSelected (TabLayout.Tab tab) dengan posisi indeks tab yang ditentukan. Kode ini akan menjelaskan tentang perubahan fragmen pada posisi yang dipilih tab menggunakan viewpager.
sumber
Ini juga bisa membantu
sumber
Jika kebetulan bahwa tab default Anda adalah yang pertama (0) dan Anda kebetulan beralih ke fragmen, maka Anda harus secara manual mengganti fragmen untuk pertama kalinya. Ini karena tab dipilih sebelum pendengar terdaftar.
Atau, Anda dapat mempertimbangkan menelepon
getTabAt(0).select()
dan menggantionTabReselected
seperti:Ini akan berhasil karena Anda pada dasarnya mengganti fragmen pada setiap tab pilih kembali.
sumber
Anda dapat mengatur posisi TabLayout menggunakan fungsi berikut
sumber
Jika Anda kesulitan memahami, kode ini dapat membantu Anda
Anda juga dapat menambahkan ini ke kode Anda:
sumber
Coba dengan cara ini.
sumber
jika Anda menggunakan TabLayout tanpa viewPager, ini membantu
sumber
Memperbaiki Kotlin
viewPager.currentItem = 0
tabs.setupWithViewPager (viewPager)
sumber
ini akan memilih tab sebagai tampilan halaman geser halaman
sumber