का उपयोग NavigationView
और FrameLayout
के साथ Fragment
एस स्विच करना चाहते हैं। यह बहुत अच्छा काम करता है। हालांकि, अगर मैं भी जल्दी से स्विच, तो Fragment
रों overlaps ...ड्रैरलेआउट/नेविगेशन व्यू
यह है executePendingTransactions()
की तरह काम नहीं करता।
<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>
अगर मैं Fragment
रों (भी) के लिए स्विच तेजी से (मैन्युअल रूप से या मेरे नेक्सस 5 पर एक 750ms देरी से कोड द्वारा), मैं दूसरे Fragment
टच सक्षम होने लेकिन साथ, ओवरलैप करने के लिए दोनों Fragment
रों मिल पहले Fragment
शीर्ष पर किया जा रहा है ...
पहले Fragment
शामिल एक ImageView
और TextView
रों। दूसरा Fragment
में TabLayout
और ViewPager
(यदि मेरे मुद्दे के साथ दिन में कुछ भी हो सकता है) शामिल है। हां, मैं AppCompat 22.2.0 और डिज़ाइन 22.2.0 लाइब्रेरीज़ का उपयोग कर रहा हूं।
यदि मैं दोनों के लिए पृष्ठभूमि रंग सेट करता हूं, तो मैं केवल पहले Fragment
देख सकता हूं, और यह कभी भी नहीं बदलता है।
मैंने कोशिश की popBackStackImmediate()
, executePendingTransactions()
, remove(fragment)
, android:fitsSystemWindows="true"
, Android: fragments overlapping issue, देरी, और अन्य बातों के, सफलता नहीं मिली।
@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);
}
संपादित
मेरी onCreate()
में मैं यह कर रहा था:
if (savedInstanceState == null) {
final MenuItem menuItem = mNavigationView.getMenu().getItem(0);
if (menuItem != null) {
navigationDrawer(menuItem.getItemId());
}
}
कौन सा भी तेजी से एक कॉल करने के लिए पता चला है। इस कोड को हटाने से मेरी समस्या हल हो गई (अस्थायी रूप से, नीचे देखें)।
मैं अभी भी क्यों executePendingTransactions()
ऐसे अजीब समस्या से बचने के नहीं था नहीं पता ...
संपादित 2
मैं एक boolean
(init गलत पर) रखने जब एक का ट्रैक रखने के बारे में सोचा Fragment
लेनदेन होता है। मैंने इसे true
पर navigationDrawer()
और में Fragment.onResume()
में सेट किया है। फिर भी कोई जाने ...
तो: अभी भी मेरे MainFragment
कि Picasso
का उपयोग कर और भी तेजी से (800ms) एक और Fragment
का उपयोग करने जा एक छवि को लोड करता है पर समस्या हो रही: वे अभी भी ओवरलैप ...
मैं देख सकता हूँ अपने कुछ और कोड ..so कि मैं तुम्हें .. – Moinkhan
@Moinkhan क्या हिस्सा मदद कर सकते हैं इसका मुझे विश्वास है कि मैंने सापेक्ष हिस्सा पोस्ट किया है। यह एक बुनियादी DrawerLayout/NavigationView कार्यान्वयन है। – shkschneider
आपके द्वारा प्रदान किया गया कोड सही था। यही कारण है कि मैंने सोचा कि समस्या कोड में हो सकती है, जो यहां उपलब्ध नहीं है .... – Moinkhan