Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Add Tabbed Activity Into Navigation Drawer Activity?

I heard that we can not run Android activity inside fragment.

I started a new project with Navigation Drawer Activity chosen. then, I need tabbed activity as default view like this :

enter image description here

If we can not run tabbed activity as fragment in navigation drawer activity then how to add it?

like image 343
Saint Robson Avatar asked Feb 18 '17 04:02

Saint Robson


1 Answers

In the navigation drawer activtiy change your layout like this :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context="in.net.spectrum.citytour.MainActivity">

<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" />
    //
    //
    // Tab layout to show tabs
    //
    //
    <android.support.design.widget.TabLayout
        android:background="@color/colorPrimary"
        app:tabSelectedTextColor="#ffffff"
        app:tabIndicatorColor="#FFFFFF"
        app:tabIndicatorHeight="3dp"
        app:tabTextColor="#FFFFFF"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"
        android:id="@+id/tbl_pages"/>

</android.support.design.widget.AppBarLayout>
<!-- <include layout="@layout/content_main" />-->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    //
    //
    //ViewPager to show tab's fragments
    //
    //

    <android.support.v4.view.ViewPager
        android:id="@+id/vp_pages"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>


    <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"
        app:srcCompat="@android:drawable/ic_dialog_email" />
</FrameLayout>


</LinearLayout>

Now in your Activity Java code inside onCreate() add these lines :

    @Override
    protected void onCreate(Bundle savedInstanceState) {
           .
           .
           .
           .

    ViewPager vp_pages= (ViewPager) findViewById(R.id.vp_pages);
    PagerAdapter pagerAdapter=new FragmentAdapter(getSupportFragmentManager());
    vp_pages.setAdapter(pagerAdapter);

    TabLayout tbl_pages= (TabLayout) findViewById(R.id.tbl_pages);
    tbl_pages.setupWithViewPager(vp_pages);

    }

Now outside onCreate() method create the fragment adapter :

class FragmentAdapter extends FragmentPagerAdapter {

    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new YourFragment1();
            case 1:
                return new YourFragment2();
            case 2:
                return new YourFragment3();
        }
        return null;
    }

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


    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            //
            //Your tab titles
            //
            case 0:return "Profile";
            case 1:return "Search";
            case 2: return "Contacts";
            default:return null;
        }
    }
}

Output : enter image description here enter image description here

Cheers, Happy coding.

like image 195
Akhil Soman Avatar answered Sep 23 '22 04:09

Akhil Soman