3

I have an Activity that have two Fragments and those fragments are presented to user by a ViewPager. So, I created a class extends FragmentStatePagerAdapter for ViewPager's adapter (MainFragsAdapter class) and I overrided some methods of it. I want to get my fragment's instances in my ViewPager from host Activity and get current fragment's root View by getView() method.

I got the instances of fragments by typing followings in Activity's onCreate() But getView() of that instance returns null :

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

    mainFragsAdapter = new MainFragsAdapter(getSupportFragmentManager());
    viewPager = (ViewPager)findViewById(R.id.Pager);
    viewPager.setAdapter(mainFragsAdapter);

    int index = viewPager.getCurrentItem();
    if(index == 0) {

 Fragment1 fragment = (Fragment1)viewPager.getAdapter().instantiateItem(viewPager, index);
 View v = fragment.getView();
 Log.e("Frag1View",v.toString()); //At this point, I'm getting NullPointerException 
                                   //because getView() returns null.(Fragment isn't null)

     }else if(index == 1){

 Fragment2 fragment =(Fragment2)viewPager.getAdapter().instantiateItem(viewPager, index);

   }
}

My FragmentStatePagerAdapter :

public class MainFragsAdapter extends FragmentStatePagerAdapter {

     private SparseArray<Fragment> fragments = new SparseArray<>();
     private Fragment currentFragment;

     private int NUM_ITEMS = 2;

     public MainFragsAdapter(FragmentManager fm,Context context) {
    super(fm);           
      }

  @Override
  public int getCount() {
    return NUM_ITEMS;
  }

  @Override
  public Fragment getItem(int position) {

    if(position == 0){

            this.currentFragment = Fragment1.createInstance();

                }
        if(position == 1){

            this.currentFragment =Fragment2.createInstance();
          }

        return this.currentFragment;
      }

    @Override
     public Object instantiateItem(ViewGroup container, int position) {

     Fragment fragment = (Fragment)super.instantiateItem(container,position);
     fragments.put(position,fragment);
     return fragment; }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    fragments.remove(position);
    super.destroyItem(container,position,object); 
     }

    public Fragment getRegisteredFragment(int position) {

    return fragments.get(position);
  }
}

How can i solve this issue ? Thank you for helps.

Cem
  • 361
  • 6
  • 17
  • I think it is the same issue mentioned in the below link https://stackoverflow.com/questions/12621960/android-how-to-get-the-views-of-a-fragment – Sathyajith Jun 08 '17 at 14:20
  • @SAJ thanks but I need to pass the reference of TextView in fragment to host Activity. I tried to use Interfaces that defined in fragment and implemented in host Acitivty, this way i can pass the fragment's view reference but I can't use that reference in Activity's onCreate(). – Cem Jun 08 '17 at 15:21
  • can you explain what you are trying to achieve here? – Sathyajith Jun 08 '17 at 17:22
  • I'm just want to get **any view instance** of my fragment (In the fragmentStatePagerAdapter) in host Activity and i want to be able to use this instance in my Activiy's onCreate() or onResume() callbacks if that possible. – Cem Jun 08 '17 at 17:35

0 Answers0