2016-01-13 2 views
6

मैं अपने खराब कोड और बुरे ज्ञान के लिए पहले से माफ़ी मांगता हूं। मैंने हाल ही में एंड्रॉइड और जावाव्यूपार्ज टैब फ्रैगमेंट और सामान्य टुकड़े

में कोडिंग शुरू कर दी है मेरी समस्या यह है कि मेरे पास नेविगेशन ड्रॉवर और टैब हैं। हालांकि अगर मैं नेविगेशन ड्रॉवर से कुछ चुनता हूं जो एक टुकड़े में लोड होता है तो यह नहीं दिखाता है। केवल टैब दिखा रहे हैं।

मेरी योजना यह है कि एक नेविगेशन ड्रॉवर टैब में 3 टैब होंगे और बाकी टैब के बिना सामान्य पृष्ठ होंगे।

MainActivity.java

http://pastebin.com/TV7aWy9c

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <FrameLayout 
     android:id="@+id/fragment_layout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:background="#000000" /> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="se.themeister.hello.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/toolbar" 
      android:background="?attr/colorPrimary" 
      android:elevation="6dp" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/AppTheme.AppBarOverlay"/> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:background="#009900" 
      android:layout_below="@id/tab_layout"/> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 

मुझे लगता है कि यदि पर्याप्त नहीं जानता जाने या अधिक जानकारी या कोड आवश्यक है

उत्तर

11

आपके कोड के साथ समस्या यह है कि ViewPagerTabLayoutFragment का हिस्सा होना चाहिए, Activity का हिस्सा नहीं। और NavigationDrawer को व्यूपोर्ट में किसी एक टुकड़े को प्रतिस्थापित करना चाहिए (यानी कंटेनर में)। अब, अपने कोड में, आप ViewPager में अपने नए Fragment को किसी भी तरह डालने का प्रयास कर रहे हैं।

Here's मार्गदर्शक ड्रॉवर साथ एक बहुत ही बुनियादी अनुप्रयोग, टैब्स के साथ एक टुकड़ा और टैब है, जो आपको एक उदाहरण के रूप में उपयोग कर सकते हैं बिना टुकड़े आराम:

enter image description here

Activity.xml:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/AppTheme.AppBarOverlay"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:popupTheme="@style/AppTheme.PopupOverlay" /> 

     </android.support.design.widget.AppBarLayout> 

     <FrameLayout 
      android:id="@+id/fragmentContainer" 
      android:layout_marginTop="?attr/actionBarSize" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

    </android.support.design.widget.CoordinatorLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" />  
</android.support.v4.widget.DrawerLayout> 

गतिविधि में कोड:

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new FragmentWithTabs()).commit(); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.fragment_1) { 
      getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new FragmentWithTabs()).commit(); 
     } else if (id == R.id.fragment_2) { 
      getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new FragmentWithoutTabs()).commit(); 
     } else if (id == R.id.fragment_3) { 
      getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new Fragment()).commit(); 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

आईई, जैसा कि आप देखते हैं, मैं FrameLayout में fragmentContainer आईडी के साथ टुकड़े बदल रहा हूं।

टैब के साथ टुकड़ा से संबंधित सभी तर्क, FragmentWithTabs में incapsulated:

public class FragmentWithTabs extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_with_tabs, container, false); 
     ViewPager viewPager = (ViewPager)rootView.findViewById(R.id.viewPager); 
     TabLayout tabLayout = (TabLayout)rootView.findViewById(R.id.tabLayout); 

     viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) { 
      @Override 
      public Fragment getItem(int position) { 
       return new SubFragment(position == 0? Color.BLUE : position == 1? Color.WHITE : Color.RED); 
      } 

      @Override 
      public CharSequence getPageTitle(int position) { 
       return position+""; 
      } 

      @Override 
      public int getCount() { 
       return 3; 
      } 
     }); 

     tabLayout.setupWithViewPager(viewPager); 
     return rootView; 
    } 
} 

मुझे आशा है कि, यह मदद करता है

+0

मैं भी एक ही दृष्टिकोण निम्नलिखित किया गया है लेकिन इसमें भी एक दोष यह है कि मैं भी देख रहा हूँ है ठीक करने के लिए। आदर्श रूप से 'टूलबार' और 'टैबलाउट' में एक ही रंग होना चाहिए लेकिन ऊपर के दृष्टिकोण का उपयोग करके 'टैबलाउट' और 'टूलबार' के बीच छाया होगी जो आदर्श नहीं है। – Sharj

संबंधित मुद्दे