Joe Silent
Joe Silent

Reputation: 181

ViewPager get fragment reference

I have activity where I have created a viewpager that contains two fragments. I need to get a reference to the existing fragment or it's view, in the activity to refresh the list from the fragment if necessary. I was looking for a solution for two days, but found nothing on this occasion.

So here is my adapter

public class SearchPagerAdapter extends FragmentStatePagerAdapter {
CharSequence Titles[];
int NumbOfTabs;
public SearchPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb) {
    super(fm);
    this.Titles = mTitles;
    this.NumbOfTabs = mNumbOfTabsumb;
}
@Override
public Fragment getItem(int position) {
    if(position == 0)
    {
        FragmentAyahSearch tab1 = new FragmentAyahSearch();
        return tab1;
    }
    else
    {
        FragmentSurahList tab2 = new FragmentSurahList();
        return tab2;
    }
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
}

@Override
public CharSequence getPageTitle(int position) {
    return Titles[position];
}
@Override
public int getCount() {
    return NumbOfTabs;
}

}

below, I create a viewpager and adapter in MainActivity

searchAdapter = new SearchPagerAdapter(getSupportFragmentManager(), searchTitles, Numboftabs);
            pager.setAdapter(searchAdapter);
            tabs.setViewPager(pager);

I hope you will help me, because I'm losing my mind over this.

Upvotes: 0

Views: 172

Answers (1)

dex
dex

Reputation: 5230

I would suggest maintain a list like
private List<Fragment> frag = new ArrayList<Fragment>();
then
public class SearchPagerAdapter extends FragmentStatePagerAdapter {
CharSequence Titles[];
int NumbOfTabs;
public SearchPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb) {
    super(fm);
    this.Titles = mTitles;
    this.NumbOfTabs = mNumbOfTabsumb;
}
@Override
public Fragment getItem(int position)
 {
   Fragment fragment = frag.get(position);
    if(fragment == null )
    {
        if (position == 0)
        {
          fragment = new FragmentAyahSearch();    
        }

        else
        {
          fragment = new FragmentSurahList();

        }
     }
    return fragment;
}

@Override
public CharSequence getPageTitle(int position) {
    return Titles[position];
}
@Override
public int getCount() {
    return frag.size();
}

now if you want the reference of any fragment
just call , frag.get(<position>) will return you desire frgament

Upvotes: 1

Related Questions