Saya telah menerapkan pustaka appcompat terbaru dan menggunakan Toolbar
bilah tindakan as. Tapi masalahnya adalah saya tidak bisa menangkap acara klik tombol home / hamburger icon. Saya sudah mencoba dan melihat semuanya tetapi sepertinya tidak menemukan masalah yang sama.
Ini Activity
kelas saya :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Set up the drawer.
navDrawerFragment =
(NavigationDrawerFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_drawer);
navDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout),
toolbar);
}
Dan ini kelas NavigationDrawerFragment saya:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
currentSelectedPosition = savedInstanceState.getInt(
STATE_SELECTED_POSITION);
fromSavedInstanceState = true;
}
// Select either the default item (0) or the last selected item.
selectItem(currentSelectedPosition);
}
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Indicate that this fragment would like
// to influence the set of actions in the action bar.
setHasOptionsMenu(true);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
drawerListView = (ListView) inflater.inflate(
R.layout.fragment_navigation_drawer, container, false);
drawerListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
selectItem(position);
}
});
//mDrawerListView.setAdapter();
//mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
return drawerListView;
}
public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
fragmentContainerView = getActivity().findViewById(fragmentId);
this.drawerLayout = drawerLayout;
// set a custom shadow that overlays the main
// content when the drawer opens
drawerLayout.setDrawerShadow(
R.drawable.drawer_shadow, GravityCompat.START);
// set up the drawer's list view
// with items and click listener
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the navigation drawer and the action bar app icon.
drawerToggle = new ActionBarDrawerToggle(
getActivity(),
drawerLayout,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
// If the user hasn't 'learned' about the drawer,
// open it to introduce them to the drawer,
// per the navigation drawer design guidelines.
if (!userLearnedDrawer && !fromSavedInstanceState) {
drawerLayout.openDrawer(fragmentContainerView);
}
// Defer code dependent on restoration of previous instance state.
drawerLayout.post(new Runnable() {
@Override
public void run() {
drawerToggle.syncState();
}
});
drawerLayout.setDrawerListener(drawerToggle);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, currentSelectedPosition);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Forward the new configuration the drawer toggle component.
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("cek", "item selected");
if (drawerToggle.onOptionsItemSelected(item)) {
Log.d("cek", "home selected");
return true;
}
return super.onOptionsItemSelected(item);
}
ketika saya mengklik item menu, log "item yang dipilih" dipanggil. Tetapi ketika saya mengklik tombol beranda, itu membuka panel samping navigasi tetapi log "rumah yang dipilih" tidak pernah dipanggil. Saya telah menetapkan onOptionsItemSelected
metode di dalam saya Activity
juga, tetapi masih belum dipanggil.
sumber
dalam kasus saya kode ini bekerja dengan sempurna
sumber
Ini adalah bagaimana saya melakukannya untuk kembali ke fragmen yang benar, sebaliknya jika Anda memiliki beberapa fragmen pada level yang sama, ia akan kembali ke fragmen pertama jika Anda tidak menimpa perilaku tombol kembali toolbar.
sumber
Saya pikir solusi yang benar dengan support library 21 adalah sebagai berikut
sumber
this.getResValues().homeIconDrawable()
, Siapathis
?dan Di setiap yang
onViewCreated
saya panggilsumber
Beginilah cara saya menerapkan desain pra-material dan tampaknya masih berfungsi sekarang, saya telah beralih ke yang baru
Toolbar
. Dalam kasus saya, saya ingin memasukkan pengguna jika mereka mencoba membuka navigasi samping saat keluar, (dan menangkap acara sehingga navigasi samping tidak akan terbuka). Dalam kasus Anda, Anda tidak bisareturn true;
.sumber
Saya mengubah DrawerLayout sedikit untuk mendapatkan kejadian dan dapat mengkonsumsi dan acara, seperti jika Anda ingin menggunakan actionToggle sebagai kembali jika Anda dalam tampilan detail:
sumber
Pendekatan termudah yang dapat kami lakukan adalah mengubah ikon beranda menjadi ikon yang dikenal dan membandingkan drawable (karena ikon android.R.id.home dapat berbeda untuk versi api yang berbeda.
jadi setel toolbar sebagai setSupportActionBar (_toolbar);
sumber
Dalam kasus saya, saya harus meletakkan ikon menggunakan:
Dan kemudian dengarkan peristiwa klik dengan onOptionsItemSelected default dan id android.R.id.home
sumber
android.R.id.home
tidak pernah menembakUntuk siapa pun yang mencari implementasi Xamarin (karena acara dilakukan secara berbeda di C #), saya cukup membuat
NavClickHandler
kelas ini sebagai berikut:Kemudian, tetapkan tombol menu hamburger khusus seperti ini:
Dan terakhir, tetapkan toggler menu laci a ToolbarNavigationClickListener dari tipe kelas yang saya buat sebelumnya:
Dan kemudian Anda memiliki tombol menu kustom, dengan event klik yang ditangani.
sumber
Coba kode ini
Tambahkan kode di bawah ini ke metode onCreate () Anda
sumber