Any idea on how to dynamically create tab in TabLayout? I am implement it with ViewPager using FragmentStatePagerAdapter, or is there any other approach? like TabWidget/TabHost? any kind of suggestion will be appreciated...
Here you go -
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
ImageListFragment fragment2 = new ImageListFragment();
Bundle bundle2 = new Bundle();
bundle2.putInt("eventId", 100);
fragment2.setArguments(bundle2);
for(int i = 0; i < count; i++){
ImageListFragment fragment = new ImageListFragment();
Bundle bundle = new Bundle();
bundle.putInt("eventId", eventIds.get(i));
bundle.putInt("id", id);
fragment.setArguments(bundle);
adapter.addFragment(fragment, eventNames.get(i));
}
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(position);
viewPager.setOffscreenPageLimit(1);
So basically you need to run a loop and create new fragment everytime and add it to your adapter.
Related
SectionFragment.class
Intent subjectDetail = new Intent(getContext(), GradeFragment.class);
ListGradeData clickItem = sectionList.get(position);
subjectDetail.putExtra(EXTRA_SECTION_ID, String.valueOf(clickItem.getSectionId()));
startActivity(subjectDetail);
GradeFragment.class
String studSectionId = getActivity().getIntent().getExtras().getString(EXTRA_SECTION_ID);
Toast.makeText(getContext(), studSectionId, Toast.LENGTH_LONG).show();
it doesn't display the studentSectionId. When I run the app it always crashed after I click the button
For fragment use FragmentManager to add/replace fragments. and create send data like
MyFragment myFragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("someInt", someInt);
myFragment.setArguments(args);
I have a layout with viewpager and fragments (say A, B, C, D).
In fragment A i have Tablayout where each Pages of tab is dynamically created
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
for (int i = 0; i < mergelist.size(); i++) {
adapter.addFrag(new BlogFragmentContent(), mergelist.get(i).getNc_title(), mergelist.get(i).getNc_id());
viewPager.setAdapter(adapter);
}
}
when i got to this layout for first Time it shows the view but if i go to any other Tab and return to this nothing shows.
Eg: First i clicked Fragment A (now view shows) then i go to Fragment C and return to Fragment A( no view there).
Try this,
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
for (int i = 0; i < mergelist.size(); i++) {
adapter.addFrag(new BlogFragmentContent(), mergelist.get(i).getNc_title(), mergelist.get(i).getNc_id());
}
viewPager.setAdapter(adapter); // put this line outside for loop
}
Try to set adapter after all pages added to it.
Your fragment states of ViewPager are not retained as your are not passing proper fragment manager.
Use below for initializing your ViewPagerAdapter:
adapter = new ViewPagerAdapter(getChildFragmentManager());
EDIT:
And yes shift setAdapter line outside of for loop
In my app there's an Activity with three tabs, each of them contains a ListFragment.
The ListFragment must show different contents, but when I pass it through the bundle it gets overwritten and I get three fragments with the same content (the latest one)
Here's the code:
In the onCreate method of the Activity:
{...
Fragment fragment;
Bundle bundle= new Bundle();
for(int i = 0; i<CATEGORIES.size(); i++) {
fragment = new MyListFragment();
bundle.putSerializable("Data", data.get(i));
fragment.setArguments(bundle);
screens.put(CATEGORIES.get(i),fragment);
}
setUpViewPagerAndTabs();
...
... }
protected void setUpViewPagerAndTabs(){
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPager.setOffscreenPageLimit(screens.size()+1);
mAdapter = new PageAdapter(screens, getSupportFragmentManager());
mViewPager.setAdapter(mAdapter);
tabs = (TabLayout) findViewById(R.id.tabs);
tabs.setTabGravity(TabLayout.GRAVITY_FILL);
tabs.setTabMode(TabLayout.MODE_FIXED);
tabs.setupWithViewPager(mViewPager);
}
In the Fragment class this line produces the overwriting of the corresponding data:
ArrayList<String> names = (ArrayList<String>)
b.getSerializable(Activity.DATA);
even if I try to pass the value of the counter (i) to the fragment, in order to pick the right element of data in the fragment, it gets overwritten.
How can I resolve this?
Thank you in advance
Not sure if it is the case. However you are passing the reference to the same bundle (out of the scope) to all the three fragments. It might depend on when the serialization / deserialization takes effect, but if it happen after the loop you have three fragment pointing to the same content of the bundle (the last one).
Try to move the bundle creation inside the loop:
for(int i = 0; i<CATEGORIES.size(); i++) {
Bundle bundle= new Bundle();
fragment = new MyListFragment();
bundle.putSerializable("Data", data.get(i));
fragment.setArguments(bundle);
screens.put(CATEGORIES.get(i),fragment);
}
I'm trying to add Fragments to a view. I have a String Array and I would like to create a new fragment for each one. Seems like a simple task.
String[] items = getResources().getStringArray(R.array.myArray);
for (int i = 0; i < items.length; i++) {
Bundle bundle = new Bundle();
bundle.putString("category", items[i]);
Fragment frag = new MyFragment();
frag.setArguments(bundle);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.mga_viewParentContainer, frag, "frag_" + i);
ft.commit();
Log.i ("FT commit called on item:", items [i]);
} // for loop
This creates a new fragment for every item in the array, however every fragment is getting the "category" bundle item from the last item in the array. So all fragments inflate the same info.
However, the Log reports all items as theyes should be.
Why is this happening?
I have a working PagerActivity (extends FragmentActivity) with a bunch of Fragment objects in it. Everything works fine but what I want to do now is to display the number of the Fragment in the list (let's say there are 25 Fragment objects and I want to display the current number in that list of Fragments).
How can I do that? Is there some method I can call in the Fragment object?
I'm filling the PagerAdapter like this (snippet):
fragments = new Vector<Fragment>();
for (int i = 0; i < wiList.length; i++) {
WhiteboardImage tmpWi = wiList[i];
Bundle bundle = new Bundle();
bundle.putString("wiImage", gson.toJson(tmpWi));
bundle.putInt("positionInList", positionInList);
bundle.putInt("totalCount", wiList.length);
fragments.add(Fragment.instantiate(params[0], GalleryFragment.class.getName(), bundle));
}
mPagerAdapter = new GalleryPagerAdapter(getSupportFragmentManager(), fragments);
Thanks for any help!
I assume GalleryPagerAdapter is a FragmentViewPager? Then the number of fragments would be fragments.size(), no?