Utilizzo di DrawerLayout
con un NavigationView
e un FrameLayout
Voglio passare a Fragment
s. Funziona alla grande. Tuttavia, se posso passare troppo in fretta, poi i Fragment
s sovrappone ...Frammenti sovrapposti con DrawerLayout/NavigationView
E 'come executePendingTransactions()
non funziona.
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar" />
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
android:layout_width="@240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/transparent"
android:dividerHeight="0dp"
app:menu="@menu/navigationdrawer" />
</android.support.v4.widget.DrawerLayout>
Se posso passare Fragment
s (troppo) velocemente (manualmente o con il codice con un ritardo 750ms sul mio Nexus 5), ottengo entrambi Fragment
s a sovrapporsi, con la seconda Fragment
avere il tocco abilitato MA la prima Fragment
stare sopra ...
il primo Fragment
contiene un ImageView
e TextView
s. Il secondo Fragment
contiene uno TabLayout
e uno ViewPager
(se questo potrebbe avere qualsiasi problema con il mio problema). Sì, sto usando le librerie AppCompat 22.2.0 e Design 22.2.0.
Se si imposta un colore di sfondo per entrambi, quindi posso solo vedere il primo Fragment
, e non cambia mai.
ho provato popBackStackImmediate()
, executePendingTransactions()
, remove(fragment)
, android:fitsSystemWindows="true"
, Android: fragments overlapping issue, ritardando, e altre cose, ma senza successo.
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(final MenuItem menuItem) {
navigationDrawer(menuItem.getItemId());
return true;
}
});
if (savedInstanceState == null) {
final MenuItem menuItem = mNavigationView.getMenu().getItem(0);
if (menuItem != null) {
navigationDrawer(menuItem.getItemId());
}
}
}
private void navigationDrawer(final int itemId) {
final Fragment fragment = getFragment(itemId);
getSupportFragmentManager().beginTrasaction()
.replace(R.id.frameLayout, fragment)
.addToBackStack(null)
.commit();
mNavigationView.getMenu().findItem(itemId).setChecked(true);
mDrawerLayout.closeDrawer(mNavigationView);
supportInvalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_first:
case R.id.menu_second:
case R.id.menu_third:
navigationDrawer(item.getItemId());
return true;
}
return super.onOptionsItemSelected(item);
}
EDIT
Nel mio onCreate()
stavo facendo questo:
if (savedInstanceState == null) {
final MenuItem menuItem = mNavigationView.getMenu().getItem(0);
if (menuItem != null) {
navigationDrawer(menuItem.getItemId());
}
}
che si rivela per effettuare una chiamata troppo rapidamente. Rimozione di questo codice risolto il mio problema (temporalmente, vedi sotto).
io ancora non so perché executePendingTransactions()
non ha impedito tale emissione strano ...
EDIT 2
ho pensato di tenere un boolean
(init a false) per tenere traccia di quando un La transazione Fragment
ha luogo. L'ho impostato su true
nel mio navigationDrawer()
e false
in Fragment.onResume()
. Ancora non va ...
Quindi: continui ad avere problemi sulla mia MainFragment
che carica un'immagine utilizzando Picasso
e il passaggio troppo rapidamente (800ms) ad un altro Fragment
: ancora si sovrappongono ...
Posso vedere la sua un po 'di codice di ..così che mi può aiutare .. – Moinkhan
@Moinkhan Quale parte di esso? Credo di aver postato la parte relativa. È un'implementazione base di DrawerLayout/NavigationView. – shkschneider
il codice che hai fornito era perfetto. è per questo che ho pensato che il problema potesse essere nel codice, che non è fornito qui ... – Moinkhan