Saat menggunakan Navigasi Drawer, pengembang Android merekomendasikan bahwa di ActionBar "hanya layar yang diwakili dalam Navigasi Drawer yang benar-benar harus memiliki gambar Navigasi Drawer" dan bahwa "semua layar lain memiliki karat tradisional."
Lihat di sini untuk perincian: http://youtu.be/F5COhlbpIbY
Saya menggunakan satu aktivitas untuk mengontrol beberapa level fragmen dan dapat menampilkan gambar Drawer Navigasi untuk ditampilkan dan berfungsi di semua level.
Saat membuat fragmen level yang lebih rendah, saya dapat memanggil ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
untuk menyembunyikan gambar Laci Navigasi dan menampilkan tanda Up
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
Masalah yang saya alami adalah ketika saya menavigasi kembali ke fragmen tingkat atas yang masih ditampilkan oleh Karat Atas alih-alih gambar Navigasi Laci asli. Adakah saran tentang cara "menyegarkan" ActionBar pada fragmen tingkat atas untuk menampilkan kembali gambar Laci Navigasi?
Larutan
Saran Tom bekerja untukku. Inilah yang saya lakukan:
Aktifitas utama
Aktivitas ini mengontrol semua fragmen dalam aplikasi.
Saat menyiapkan fragmen baru untuk menggantikan yang lain, saya mengatur DrawerToggle setDrawerIndicatorEnabled(false)
seperti ini:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
Selanjutnya, onBackPressed
sebagai ganti, saya mengembalikan yang di atas dengan mengatur DrawerToggle setDrawerIndicatorEnabled(true)
seperti ini:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
Di LowerLevelFragments
Dalam fragmen yang saya modifikasi onCreate
dan onOptionsItemSelected
seperti ini:
Dalam onCreate
ditambahkan setHasOptionsMenu(true)
untuk mengaktifkan konfigurasi menu opsi. Juga atur setDisplayHomeAsUpEnabled(true)
untuk mengaktifkan < di bilah tindakan:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Kemudian onOptionsItemSelected
setiap kali < ditekan, panggilan onBackPressed()
dari aktivitas untuk naik satu tingkat dalam hierarki dan menampilkan Navigasi Drawer Image:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}
.replace(R.id.frag_layout
. Jika ini adalah satu tingkat hirarki lagi saya harapkan Anda .add
ke backstack.
theDrawerToggle.setDrawerIndicatorEnabled(false);
dalam fragmen? Saya pikir itu dideklarasikan di file kelas Kegiatan Utama. Saya tidak dapat menemukan cara untuk referensi ini. Ada petunjuk?
setDisplayOptions()
metode di dalam ToolbarWidgetWrapper
(dari paket android.support.v7.internal.widget internal) tidak akan membuat ulang ikon saat memasukkan fragmen yang sama untuk kedua kalinya. Hanya meninggalkan ini di sini ketika orang lain menemukan masalah ini juga.