Mit einer mit einer NavigationView
und einer FrameLayout
möchte ich Fragment
s. Das funktioniert großartig. Allerdings, wenn ich zu schnell wechseln, dann werden die Fragment
s überlappt ...Fragmente, die sich mit DrawerLayout/NavigationView überlappen
Es ist wie executePendingTransactions()
funktioniert nicht.
<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>
Wenn ich Fragment
s (zu) schnell (manuell oder durch Code mit einem 750 ms Verzögerung auf meinem Nexus 5) wechseln, habe ich beide Fragment
s zu überlappen, wobei die zweite Fragment
aktiviert die Berührung mit BUT die erste Fragment
oben zu sein ...
die erste enthält eine Fragment
ImageView
und TextView
s. Die zweite Fragment
enthält eine TabLayout
und eine ViewPager
(wenn das mit meinem Problem etwas zu Tage hätte). Ja, ich verwende die Bibliotheken AppCompat 22.2.0 und Design 22.2.0.
Wenn ich eine Hintergrundfarbe für beide festlegen, dann kann ich nur die erste Fragment
sehen, und es ändert sich nie.
Ich versuchte popBackStackImmediate()
, executePendingTransactions()
, remove(fragment)
, android:fitsSystemWindows="true"
, Android: fragments overlapping issue, Verzögerungs- und andere Dinge, ohne Erfolg.
@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
In meinem onCreate()
ich dies tat:
if (savedInstanceState == null) {
final MenuItem menuItem = mNavigationView.getMenu().getItem(0);
if (menuItem != null) {
navigationDrawer(menuItem.getItemId());
}
}
Welche stellt sich heraus, um einen Anruf zu tätigen zu schnell. Das Entfernen dieses Codes löste mein Problem (zeitlich, siehe unten).
Ich weiß immer noch nicht, warum executePendingTransactions()
nicht so seltsames Problem hinderte ...
EDIT 2
Ich dachte über ein boolean
(init false) zu halten, um zu verfolgen, wenn ein Fragment
Transaktion findet statt. Ich setze es auf true
in meinem navigationDrawer()
und false
in Fragment.onResume()
. Noch nicht gehen ...
Also: immer noch Problem auf meinem MainFragment
mit, die ein Bild lädt Picasso
verwenden und zu schnell (800ms) zu einem anderen Fragment
vermittlungs sie noch überlappen ...
kann ich Ihr noch mehr Code sehen ..so dass ich Ihnen .. – Moinkhan
@Moinkhan Was Teil kann helfen davon? Ich glaube, ich habe den relativen Teil veröffentlicht. Es ist eine grundlegende DrawerLayout/NavigationView-Implementierung. – shkschneider
Der von Ihnen bereitgestellte Code war perfekt. deshalb dachte ich, dass das Problem im Code sein kann, der hier nicht zur Verfügung gestellt wird. – Moinkhan