Skip to content

Instantly share code, notes, and snippets.

@cesco89
Last active January 11, 2022 02:56
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save cesco89/11008973 to your computer and use it in GitHub Desktop.
Save cesco89/11008973 to your computer and use it in GitHub Desktop.
Add Fragments dynamically to ViewPager
List<Fragment> fragments = buildFragments();
ArrayList<String> categories = {"1", "2", "3", ..., "n"};
mPager = (ViewPager) v.findViewById(R.id.pager);
mPageAdapter = new MyFragmentPageAdapter(this,getSupportFragmentManager(), fragments, categories);
mPager.setAdapter(mPageAdapter);
//Add a new Fragment to the list with bundle
Bundle b = new Bundle();
b.putInt("position", i);
String title = "asd";
mPageAdapter.add(MyFragment.class, title, b);
mPageAdapter.notifyDataSetChanged();
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentPageAdapter extends FragmentPagerAdapter {
public static int pos = 0;
private List<Fragment> myFragments;
private ArrayList<String> categories;
private Context context;
public MyFragmentPageAdapter(Context c, FragmentManager fragmentManager, List<Fragment> myFrags, ArrayList<String> cats) {
super(fragmentManager);
myFragments = myFrags;
this.categories = cats;
this.context = c;
}
@Override
public Fragment getItem(int position) {
return myFragments.get(position);
}
@Override
public int getCount() {
return myFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
setPos(position);
return categories.get(position);
}
public static int getPos() {
return pos;
}
public void add(Class<Fragment> c, String title, Bundle b) {
myFragments.add(Fragment.instantiate(context,c.getName(),b));
categories.add(title);
}
public static void setPos(int pos) {
MyFragmentPageAdapter.pos = pos;
}
}
private List<android.support.v4.app.Fragment> buildFragments() {
List<android.support.v4.app.Fragment> fragments = new ArrayList<android.support.v4.app.Fragment>();
for(int i = 0; i<categories.size(); i++) {
Bundle b = new Bundle();
b.putInt("position", i);
fragments.add(Fragment.instantiate(this,MyPagerFragment.class.getName(),b));
}
return fragments;
}
@kanchan2mj
Copy link

Was Really Helpful :)

@SagarPanwala
Copy link

I don't want to loose the page scrolled. I want to persist the scrolled page when I adds the new fragment to the end of the list. So it will not shows directly to user. Whenever user scrolls to the last item , he can understand that yeah there is new fragment added in the list.

@ArunCyberenue
Copy link

Good

@Mukeshkannan-Nplus
Copy link

thankyou

@MaheshCapcee
Copy link

can you give me the link to download this project

@abanoubha
Copy link

Thanks for the great code!

@rishadb7
Copy link

rishadb7 commented Jun 5, 2018

Thanx for this code

ping me for complete source code
rishadb7@gmail.com

@GuyDviri
Copy link

Can its possible to attach fragment to a viewPager after its create with gerFragmentManager()..beingTrans..()..add(simpleFra).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment