Ich benutze MaterialDrawer und Code MainActivity ist:Warum funktioniert ClickListeners nicht für Toolbar?
public class MainActivity extends AppCompatActivity implements KitchenFragment.CallbackOne {
public static final String TAG = "myLogTag";
private Toolbar mToolbar;
private Drawer drawer;
private FragmentManager fm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "CLICK NOCL");
}
});
setSupportActionBar(mToolbar);
// getSupportActionBar().setDisplayHomeAsUpEnabled(false);
fm = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.content_frame);
if (fragment == null) {
fragment = MenuFragment.newInstance();
fm.beginTransaction()
.add(R.id.content_frame, fragment)
.commit();
}
drawer = new DrawerBuilder()
.withActivity(this)
.withToolbar(mToolbar)
.withActionBarDrawerToggle(true)
.withHeader(R.layout.drawer_header)
.addDrawerItems(
new PrimaryDrawerItem().withName(R.string.menu).withIdentifier(1),
new PrimaryDrawerItem().withName(R.string.kitchen_title).withIdentifier(2),
new PrimaryDrawerItem().withName(R.string.information_title).withEnabled(false)
).withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
Log.d(TAG, "position clicked: " + position);
Fragment fragment = MenuFragment.newInstance();
switch (position) {
case 1:
fragment = MenuFragment.newInstance();
break;
case 2:
fragment = KitchenFragment.newInstance();
break;
default:
fragment = new Fragment();
}
fm.beginTransaction().replace(R.id.content_frame, fragment).commit();
return false;
}
})
.withFireOnInitialOnClick(true)
.withSavedInstance(savedInstanceState)
.withOnDrawerNavigationListener(new Drawer.OnDrawerNavigationListener() {
@Override
public boolean onNavigationClickListener(View view) {
Log.d(TAG, "CLICK in DNL");
if (!drawer.getActionBarDrawerToggle().isDrawerIndicatorEnabled()) {
onBackPressed();
return true;
} else
return false;
}
})
.build();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "CLICK OIS");
switch (item.getItemId()) {
case R.id.action_settings:
return true;
case android.R.id.home:
getFragmentManager().popBackStackImmediate();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState = drawer.saveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen())
drawer.closeDrawer();
else if (getFragmentManager().getBackStackEntryCount() == 1) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
drawer.getActionBarDrawerToggle().syncState();
getFragmentManager().popBackStack();
} else if (getFragmentManager().getBackStackEntryCount() > 0)
getFragmentManager().popBackStack();
else
super.onBackPressed();
}
@Override
public void setFirstSelected() {
drawer.setSelection(1);
}
}
Ich versuche, ein Klick in mToolbar.setNavigationOnClickListener
und withOnDrawerNavigationListener
und onOptionsItemSelected
zu verfolgen. Kein Zuhörer reagierte nicht auf Klicken.
Wie Sie sehen, verwende ich Activity
, die Fragment
(1) startet, die wiederum Fragment
(2 und 3). In 2 und 3 Fragment
in OnCreate
i verwenden ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
, und ich muß durch die Zurück-Taste drücken (in Symbolleiste), das vorherige Fragment zurückkehrt, und nicht offen Schublade
Wow, Mike! Hallo, und vielen Dank für die Antwort, aber vielleicht habe ich es falsch ausgedrückt - ich muss auf einem Fragment von 2 und 3 sein, indem ich die Zurück-Taste (in der Symbolleiste, die mit einem Hamburger auf dem Pfeil ändert) zurück zum vorherigen Fragment und öffnete das Fach nicht. Ich erkannte, dass alle Zuhörer gefunden, aber keiner von ihnen funktioniert nicht, wenn Sie den Zurück-Pfeil drücken – abbath0767
Wie haben Sie den Zurück Pfeil definiert? Sie haben überprüft, ob das Home-Ereignis im Fragment statt in der Aktivität ausgelöst wird? – mikepenz
im Fragment in onCreate verwende ich ((AppCompatActivity) getActivity()). GetSupportActionBar(). SetDisplayHomeAsUpEnabled (true); zum definieren zurück pfeil – abbath0767