Search code examples
androidandroid-fragmentsandroid-activitynavigation-drawerandroid-tabhost

How to add Tabhost in Navigation Drawer


In my app I am using navigation drawer from this tutorial http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/

Now I am trying to add tabhost with fragment,but its not working

it shows error here tabss.setViewPager(mViewPager);

Cannot resolve method setviewpager(android.support.v4.view.viewpager)

public class All_Product_Details extends Fragment {


    private TabHost mTabHost;
    private ViewPager mViewPager;
    private YourAdapter mTabsAdapter;

    private Button descr;
    private TextView general_desc;
    private TextView short_desc;
    private TextView full_desc;


    private Button btn_add_to_cart;

    public All_Product_Details(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.all_product_detais, container, false);

        mViewPager = (ViewPager)rootView.findViewById(R.id.viewpager);
        mTabsAdapter= new YourAdapter(getFragmentManager());
        mViewPager.setAdapter(mTabsAdapter);
        TabWidget tabss = (TabWidget)rootView.findViewById(R.id.tabs);
        tabss.setViewPager(mViewPager);


        general_desc=(TextView)rootView.findViewById(R.id.general_desc);
        short_desc=(TextView)rootView.findViewById(R.id.short_desc);
        full_desc=(TextView)rootView.findViewById(R.id.full_desc);

       btn_add_to_cart=(Button)rootView.findViewById(R.id.btn_addtocart);
        btn_add_to_cart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Add_to_cart tf = new Add_to_cart();
                android.support.v4.app.FragmentManager fm = getFragmentManager();
                android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.frame_container, tf);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.addToBackStack(null);
                ft.commit();
            }
        });


        short_desc.setVisibility(View.GONE);
        full_desc.setVisibility(View.GONE);
        descr=(Button)rootView.findViewById(R.id.all_prod_description);
        descr.setBackgroundResource(R.drawable.hidebackground);
        descr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (flag == 0) {
                    descr.setBackgroundResource(R.drawable.showbackground);
                    //lnrallbtns.setVisibility(View.GONE);
                    general_desc.setVisibility(View.GONE);
                    flag++;
                } else {
                    descr.setBackgroundResource(R.drawable.hidebackground);
                   // lnrallbtns.setVisibility(View.VISIBLE);
                    general_desc.setVisibility(View.VISIBLE);
                    short_desc.setVisibility(View.GONE);
                    full_desc.setVisibility(View.GONE);
                    flag = 0;
                }
            }
        });

      return rootView;
    }

    public class YourAdapter extends FragmentStatePagerAdapter {
        private String[] titles = { "Item 1", "Item 2", "Item 3" };
        public YourAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            switch(i){
                case 0:{
                    return new FragementA();
                }case 1:{
                    return new FragmentB();
                }case 2:{
                    return new FragmentC();
                }
            }
        }

        @Override
        public int getCount() {
            return titles.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
}

Solution

  • I found and referred an awsm example called Balaji-K13 .

    You can add whatever your list in here like:

    Inside MainActivity.java

    package com.webileapps.navdrawer;
    
    import android.content.res.Configuration;
    import android.os.Bundle;
    import android.support.v4.app.ActionBarDrawerToggle;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.widget.DrawerLayout;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    import com.actionbarsherlock.app.SherlockFragment;
    import com.actionbarsherlock.app.SherlockFragmentActivity;
    
    public class MainActivity extends SherlockFragmentActivity {
        DrawerLayout mDrawerLayout;
        ListView mDrawerList;
        ActionBarDrawerToggle mDrawerToggle;
    
        private CharSequence mDrawerTitle;
        private CharSequence mTitle;
        private String[] mPlanetTitles;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mTitle = mDrawerTitle = getTitle();
            mPlanetTitles = getResources().getStringArray(R.array.planets_array);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            mDrawerList = (ListView) findViewById(R.id.left_drawer);
    
            // set a custom shadow that overlays the main content when the drawer
            // opens
            mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                    GravityCompat.START);
            // set up the drawer's list view with items and click listener
            mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                    R.layout.drawer_list_item, mPlanetTitles));
            mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    
            // enable ActionBar app icon to behave as action to toggle nav drawer
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
    
            // ActionBarDrawerToggle ties together the the proper interactions
            // between the sliding drawer and the action bar app icon
            mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
            mDrawerLayout, /* DrawerLayout object */
            R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
            R.string.drawer_open, /* "open drawer" description for accessibility */
            R.string.drawer_close /* "close drawer" description for accessibility */
            ) {
                public void onDrawerClosed(View view) {
                    getSupportActionBar().setTitle(mTitle);
                    invalidateOptionsMenu(); // creates call to
                                                // onPrepareOptionsMenu()
                }
    
                public void onDrawerOpened(View drawerView) {
                    getSupportActionBar().setTitle(mDrawerTitle);
                    invalidateOptionsMenu(); // creates call to
                                                // onPrepareOptionsMenu()
                }
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);
    
            if (savedInstanceState == null) {
                selectItem(0);
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(
                com.actionbarsherlock.view.MenuItem item) {
    
            switch (item.getItemId()) {
    
            case android.R.id.home: {
                if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                    mDrawerLayout.closeDrawer(mDrawerList);
                } else {
                    mDrawerLayout.openDrawer(mDrawerList);
                }
                break;
            }
    
            case R.id.action_contact:
                // QuickContactFragment dialog = new QuickContactFragment();
                // dialog.show(getSupportFragmentManager(), "QuickContactFragment");
                // return true;
    
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        // The click listener for ListView in the navigation drawer
        private class DrawerItemClickListener implements
                ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                selectItem(position);
            }
        }
    
    
        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            // Sync the toggle state after onRestoreInstanceState has occurred.
            mDrawerToggle.syncState();
        }
    
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            // Pass any configuration change to the drawer toggles
            mDrawerToggle.onConfigurationChanged(newConfig);
        }
    
        private void selectItem(int position) {
    
            switch (position) {
            case 0:
                getSupportFragmentManager()
                        .beginTransaction()
                        .add(R.id.content,
                                PageSlidingTabStripFragment.newInstance(),
                                PageSlidingTabStripFragment.TAG).commit();
                break;
            default:
    
                SherlockFragment fragment = new PlanetFragment();
                Bundle args = new Bundle();
                args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
                fragment.setArguments(args);
    
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.content, fragment).commit();
                break;
            }
    
            mDrawerLayout.closeDrawer(mDrawerList);
        }
    
    
    
    }
    

    Inside PageSlidingTabStripFragment.java

        package com.webileapps.navdrawer;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.actionbarsherlock.app.SherlockFragment;
    import com.astuetz.PagerSlidingTabStrip;
    
    public class PageSlidingTabStripFragment extends Fragment {
    
        public static final String TAG = PageSlidingTabStripFragment.class
                .getSimpleName();
    
        public static PageSlidingTabStripFragment newInstance() {
            return new PageSlidingTabStripFragment();
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRetainInstance(true);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            return inflater.inflate(R.layout.pager, container, false);
        }
    
        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
            PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view
                    .findViewById(R.id.tabs);
            ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
            MyPagerAdapter adapter = new MyPagerAdapter(getChildFragmentManager());
            pager.setAdapter(adapter);
            tabs.setViewPager(pager);
    
        }
    
        public class MyPagerAdapter extends FragmentPagerAdapter {
    
            public MyPagerAdapter(android.support.v4.app.FragmentManager fm) {
                super(fm);
            }
    
            private final String[] TITLES = { "Categories", "Home", "Top Paid",
                    "Top Free" };
    
            @Override
            public CharSequence getPageTitle(int position) {
                return TITLES[position];
            }
    
            @Override
            public int getCount() {
                return TITLES.length;
            }
    
            @Override
            public SherlockFragment getItem(int position) {
                return SuperAwesomeCardFragment.newInstance(position);
            }
        }
        }
    

    Inside PlanetFragment.java

    package com.webileapps.navdrawer;
    
    import java.util.Locale;
    
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    
    import com.actionbarsherlock.app.SherlockFragment;
    
    public class PlanetFragment extends SherlockFragment {
        public static final String ARG_PLANET_NUMBER = "planet_number";
    
        public PlanetFragment() {
            // Empty constructor required for fragment subclasses
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_planet, container,
                    false);
            int i = getArguments().getInt(ARG_PLANET_NUMBER);
            String planet = getResources().getStringArray(R.array.planets_array)[i];
    
            int imageId = getResources().getIdentifier(
                    planet.toLowerCase(Locale.getDefault()), "drawable",
                    getActivity().getPackageName());
            ((ImageView) rootView.findViewById(R.id.image))
                    .setImageResource(imageId);
            getActivity().setTitle(planet);
            return rootView;
        }
    }
    

    And finally SuperAwesomeCardFragment.java

    package com.webileapps.navdrawer;
    
    import android.os.Bundle;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.FrameLayout;
    import android.widget.FrameLayout.LayoutParams;
    import android.widget.TextView;
    
    import com.actionbarsherlock.app.SherlockFragment;
    
    public class SuperAwesomeCardFragment extends SherlockFragment{
    
        private static final String ARG_POSITION = "position";
    
        private int position;
    
        public static SuperAwesomeCardFragment newInstance(int position) {
            SuperAwesomeCardFragment f = new SuperAwesomeCardFragment();
            Bundle b = new Bundle();
            b.putInt(ARG_POSITION, position);
            f.setArguments(b);
            return f;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            position = getArguments().getInt(ARG_POSITION);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    
            FrameLayout fl = new FrameLayout(getActivity());
            fl.setLayoutParams(params);
    
            final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources()
                    .getDisplayMetrics());
    
            TextView v = new TextView(getActivity());
            params.setMargins(margin, margin, margin, margin);
            v.setLayoutParams(params);
            v.setLayoutParams(params);
            v.setGravity(Gravity.CENTER);
            v.setBackgroundResource(R.drawable.background_card);
            v.setText("CARD " + (position + 1));
    
            fl.addView(v);
            return fl;
        }
    
    }
    

    Hope this Helped :)