Kode saya berfungsi dengan baik: setiap kali item di Navigasi Drawer diklik item dipilih.
Tentu saja saya ingin memulai aplikasi dengan fragmen default (home), tetapi Navigasi Drawer tidak memiliki item yang dipilih. Bagaimana saya bisa memilih item itu secara terprogram?
public class BaseApp extends AppCompatActivity {
//Defining Variables
protected String LOGTAG = "LOGDEBUG";
protected Toolbar toolbar;
protected NavigationView navigationView;
protected DrawerLayout drawerLayout;
private DateManager db = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_layout);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
// set the home/dashboard at startup
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, new DashboardFragment());
fragmentTransaction.commit();
setNavDrawer();
}
private void setNavDrawer(){
// Initializing Toolbar and setting it as the actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
// I THINK THAT I NEED EDIT HERE...
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
switch (menuItem.getItemId()) {
//Replacing the main content with ContentFragment
case R.id.home:
DashboardFragment dashboardFragment = new DashboardFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
fragmentTransaction.commit();
return true;
[...]
Saya pikir saya perlu mengedit di sini:
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
Atau di onCreate
Startup aplikasi dengan FragmentTransaction.
Terima kasih atas dukungan Anda.
android
navigation-drawer
sineverba
sumber
sumber
onNavigationItemSelected
tindakan untuk id yang dipilih?Jawaban:
Gunakan kode di bawah ini:
Panggil metode ini setelah Anda menelepon
setNavDrawer();
The
getItem(int index)
Metode mendapatkanMenuItem
maka Anda dapat memanggilsetChecked(true);
pada ituMenuItem
, semua Anda yang tersisa untuk dilakukan adalah untuk mengetahui indeks elemen tidak default memiliki, dan mengganti 0 dengan indeks itu.Anda dapat memilih (menyorot) item dengan menelepon
Berikut ini tautan referensi: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html
EDIT Tidak berfungsi pada nexus 4, mendukung revisi perpustakaan 24.0.0. Saya merekomendasikan penggunaan
navigationView.setCheckedItem(R.id.nav_item);
dijawab oleh @kingston di bawah ini.
sumber
setCheckedItem (int id)
.navigationView.post(new Runnable() { navigationView.setCheckedItem(...) })
- bekerja.Anda juga dapat menghubungi:
Metode ini diperkenalkan di API 23.0.0
Contoh
catatan:
android:checkableBehavior="single"
Lihat juga ini
sumber
android:checkable="true"
lain itu tidak akan diperiksa sendiri.navItemSelecteListener
karena item dipilih setelah metode ini kembali.Bagi saya kedua metode ini tidak berhasil:
navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
Coba yang ini, ini bekerja untuk saya.
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));
sumber
Contoh ( NavigationView.OnNavigationItemSelectedListener ):
Tks
sumber
performIdentifierAction
dan apa yang terjadi dionNavigationItemSelected
. Bagi Anda itu mungkin kelihatannya lurus ke depan, tetapi pengembang yang lebih baru mungkin mengalami kesulitan memahami kode Anda.Selalu ada masalah dengan lib dukungan Googles "oh begitu hebat". Jika Anda ingin memeriksa item tanpa menurunkan versi libs dukungan Anda, cukup setel periksa sebelum menyetel keadaan dicentang.
Ini juga bisa berfungsi jika Anda mengatur checkable di menu xml file
sumber
Anda dapat menyorot dan memilih item dengan 1-liner berikut:
Sumber: https://stackoverflow.com/a/31044917/383761
sumber
API 23 menyediakan metode berikut:
Namun, karena alasan tertentu fungsi ini tidak menyebabkan kode di belakang item navigasi untuk berjalan. Metode ini tentu menyoroti item dalam laci navigasi, atau 'memeriksanya', tetapi sepertinya tidak memanggil yang
OnNavigationItemSelectedListener
menghasilkan layar kosong saat start-up jika layar start-up Anda bergantung pada pilihan laci navigasi. Dimungkinkan untuk secara manual memanggil pendengar, tetapi tampaknya tidak jelas:Kode di atas mengasumsikan:
NavigationView.OnNavigationItemSelectedListener
dalam aktivitas AndanavigationView.setNavigationItemSelectedListener(this);
sumber
Anda harus memanggil 2 fungsi untuk ini:
Pertama: untuk mengecualikan perintah yang telah Anda implementasikan di
onNavigationItemSelected
pendengar:Kedua: untuk mengubah status item menu laci navigasi menjadi yang dipilih (atau dicentang):
Saya memanggil kedua fungsi dan itu berhasil untuk saya.
sumber
Kode berikut hanya akan membuat item menu dipilih:
navigationView.setCheckedItem(id);
Untuk memilih dan membuka item menu, tambahkan kode berikut setelah baris di atas.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
sumber
Ini solusi saya, sangat sederhana.
Ini file menu.xml saya:
Menu di atas akan menyorot item menu pertama. Baris di bawah ini akan melakukan sesuatu (misalnya: tampilkan fragmen pertama, dll). CATATAN: tulis setelah 'konfigurasikan kode laci Anda'
sumber
Cara termudah adalah memilihnya dari xml sebagai berikut,
Perhatikan barisnya
android:checked="true"
sumber
Pertama-tama buat warna untuk item yang dipilih. Di sini https://stackoverflow.com/a/30594875/1462969 contoh yang baik. Ini membantu Anda untuk mengubah warna ikon. Untuk mengubah latar belakang semua item yang dipilih, tambahkan file nilai \ style.xml Anda ini
Di mana selectable_item_background harus dinyatakan dalam drawable / selectable_item_background.xml
Di mana warna dapat dideklarasikan di style.xml
Dan setelah ini
Seperti yang Anda lihat, saya menggunakan mainNavigationMenu_.getMenu ini (). FindItem (itemId) .setChecked (true); untuk mengatur item yang dipilih. Sini navigasinya
sumber
@color/state_list
kode dalam jawaban Anda. Karena penasaran, dari mana Anda mendapatkan konvensi penamaan untuk meletakkan garis bawah di akhir nama variabel? Saya belum pernah melihat pendekatan itu.menuItem.getItemId()
bukannyaitemId
Saat menggunakan
BottomNavigationView
jawaban lain sepertinavigationView.getMenu().getItem(0).setChecked(true);
dannavigationView.setCheckedItem(id);
tidak akan berfungsi, panggilansetSelectedItemId
berfungsi:sumber
Buat pemilih untuk item Individaual dari Nav Drawer
Buat beberapa perubahan di NavigationView Anda
sumber
pada aktivitas Anda (di belakang laci):
dan
dan di menu Anda:
jadi menu pertama adalah highlight dan tampil sebagai menu default.
sumber
Kode di bawah ini digunakan untuk memilih item pertama dan menyorot item pertama yang dipilih dalam menu.
sumber
kamu bisa melakukan ini,
nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
sumber
Untuk beberapa alasan lebih baik menemukan MenuItem menggunakan ID.
sumber