2

I worked with Fragment before, so i have 5 fragments that corresponds with 5 tabs in ViewPagerIndicator, but how can i populate each tab? Here's an example of a Fragment i have :

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        viewta = inflater.inflate(R.layout.agridviewxml, container, false);
}

And here's how my ViewPagerIndicator Works:

private static final String[] CONTENT = new String[] { "Samsung", "HTC",
            "LG", "Sony", "Search" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_tabs);

        FragmentPagerAdapter adapter = new GoogleMusicAdapter(
                getSupportFragmentManager());

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);

        TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(pager);
    }

    class GoogleMusicAdapter extends FragmentPagerAdapter {
        public GoogleMusicAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position % CONTENT.length].toUpperCase();
        }

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

Any idea or suggestions?? THANKS ALOT

Each tab is empty, i want to fill it (populate it) with data: enter image description here

  • 1
    What do you mean by populate? – Pavlos Aug 18 '13 at 16:12
  • What kind of data you need? Your own layout, a listview, some textview or what? – Pavlos Aug 18 '13 at 16:17
  • @Pavlos A Fragment that contains gridview with a custom adapter –  Aug 18 '13 at 16:21
  • http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/ Follow this tutorial and use Your own fragment instead of the activity! Also check this: http://stackoverflow.com/questions/10798943/image-gridview-inside-fragment – Pavlos Aug 18 '13 at 16:28
  • @Pavlos i have a fully functional Fragments. But i just want to know how to connect each tab to a fragment?! –  Aug 18 '13 at 16:37

3 Answers3

0

You need write a TestFragment that shows your desired UI.

For example, to have "A Fragment that contains listview with a custom adapter", you can have TestFragment extend ListFragment, and populate the adapter in a method like onActivityCreated().

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • I already have 5 Fragments. But how can i connect each tab with a fragment without writing a TestFragment –  Aug 18 '13 at 16:39
  • @KingOmar: "I already have 5 Fragments" -- not according to the code in your question. "But how can i connect each tab with a fragment without writing a TestFragment" -- replace your `getItem()` method in your `FragmentPagerAdapter` with something else, such as a `switch` that returns the proper fragment based upon position. – CommonsWare Aug 18 '13 at 16:42
  • THANKS! THAT CODE WORKS: switch (position) { case 0: return new SamsungLB(); case 1: return new HTCLB(); case 2: return new LGLB(); case 3: return new SonyLB(); case 4: return new SearchLB(); } –  Aug 18 '13 at 16:57
0

Do something like the following in order to connect tabs with Fragments:

mTabsAdapter = new TabsAdapter(this, mViewPager);

    mTabsAdapter.addTab(bar.newTab().setText(getString(R.string.monday)),
            Monday.class, packBundle);
    mTabsAdapter.addTab(bar.newTab().setText(getString(R.string.tuesday)),
            Tuesday.class, packBundle);
    mTabsAdapter.addTab(
            bar.newTab().setText(getString(R.string.wednesday)),
            Wednesday.class, packBundle);
    mTabsAdapter.addTab(bar.newTab().setText(getString(R.string.thursday)),
            Thursday.class, packBundle);
    mTabsAdapter.addTab(bar.newTab().setText(getString(R.string.friday)),
            Friday.class, packBundle);

Where bar is my actionbar and the Monday.class etc are my Fragments. the packBundle at the end are extras that i send to every Fragment for personal use! My TabsAdapter is your own GoogleMusicAdapter! Change it accordingly!

AddTab method:

public void addTab(ActionBar.Tab tab,Class<?> clss,Bundle args)
Pavlos
  • 2,183
  • 2
  • 20
  • 27
0

You need two classes in your project.

  1. TabsAdapter which will extend FragmentPagerAdapter implements OnPageChangeListener, TabListener
  2. A simple class that will extend Fragment. Basically this will contain which fragment to load.

In TabsAdapter class you need to pass in all the data like what all classes you need to load and title of tab like

public TabsAdapter(SherlockFragmentActivity fa, ViewPager vPager) {
    // TODO Auto-generated constructor stub
    super(fa.getSupportFragmentManager());
    context=fa;
    ab=fa.getSupportActionBar();
    mvPager=vPager;
    mvPager.setAdapter(this);
    mvPager.setOnPageChangeListener(this);


}

add another method to your TabsAdapter class which will add tabs to your ViewPager

 public void addTab(ActionBar.Tab tab,Class<?> clss,Bundle args){
     TabInfo info=new TabInfo(clss, args);
    tab.setTag(info);
    tab.setTabListener(this);
    mtabs.add(info);
    ab.addTab(tab);
    notifyDataSetChanged();
}

and from the activity pass values like :

    adap=new TabsAdapter(this,vPager);
    adap.addTab(ab.newTab().setText("title of tab"), Fragment_1.class,null);
    vPager.setAdapter(adap);

Now customize your tabsadapter class accordingly and use the overriden methods as per your needs. I hope this small hint is helpful to you.

Udit Kapahi
  • 2,277
  • 1
  • 27
  • 25