NoWar
NoWar

Reputation: 37633

Pass data from Activity to Fragment of ViewPager via FragmentPagerAdapter

How is possible to send data to from Activity to Fragment of ViewPager via FragmentPagerAdapter?

Thanks!

AppCompatActivity

public class UnitDetailsActivity extends AppCompatActivity {

  private ViewPager viewPager;

   @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unit_details);


 viewPager = (android.support.v4.view.ViewPager)findViewById(R.id.container);

  // Getting unitID  via and pass it to Fragment ???
  int unitID = getIntent().getStringExtra("SelectedUnitDeviceId");
  // And how to pass it to Fragment?      

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        adapter = new ViewPagerUnitDetailsAdapter(this.getSupportFragmentManager());
        fragmentReportHauls = new FragmentReportHauls();
        fragmentReportsDowntime = new FragmentReportsDowntime();

        adapter.addFragment(fragmentReportHauls);
        adapter.addFragment(fragmentReportsDowntime);

        viewPager.setAdapter(adapter);

}
}

FragmentPagerAdapter

public class ViewPagerUnitDetailsAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerUnitDetailsAdapter (FragmentManager manager) {
        super(manager);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0){
            // How to pass here unitID ???
            return FragmentReportHauls.newInstance(????);
        }
        else {
            return FragmentReportsDowntime.newInstance(???);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0){
            return FragmentReportHauls.PAGE_TITLE;
        }
        else {
            return FragmentReportsDowntime.PAGE_TITLE;
        }
    }
}

ViewPager Fragment

public class FragmentReportHauls extends Fragment {

    public static final String PAGE_TITLE = "Shift";

    private final String unitID;

    public FragmentReportHauls() {
    }

    // Here I want to get unitID
    public static FragmentReportHauls newInstance(String unitID) {
        FragmentReportHauls fragment = new FragmentReportHauls();
        this.unitID = unitID;
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_fragment_report_hauls, container, false); 


        return view;
    }
}
}

Upvotes: 0

Views: 5750

Answers (2)

NoWar
NoWar

Reputation: 37633

Ok. I found solution.

AppCompatActivity

public class UnitDetailsActivity extends AppCompatActivity {

  private ViewPager viewPager;

   @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unit_details);


 viewPager = (android.support.v4.view.ViewPager)findViewById(R.id.container);

  // Getting unitID  via and pass it to Fragment ???
  int unitID = getIntent().getStringExtra("SelectedUnitDeviceId");
  // And how to pass it to Fragment?      

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        adapter = new ViewPagerUnitDetailsAdapter(this.getSupportFragmentManager());
        fragmentReportHauls = new FragmentReportHauls();
        fragmentReportsDowntime = new FragmentReportsDowntime();

        adapter.addFragment(fragmentReportHauls, unitID);
        adapter.addFragment(fragmentReportsDowntime, unitID);

        viewPager.setAdapter(adapter);

}
}

FragmentPagerAdapter

public class ViewPagerUnitDetailsAdapter extends FragmentPagerAdapter {

     private final String unitID;

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerUnitDetailsAdapter (FragmentManager manager) {
        super(manager);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String unitID) {
        mFragmentList.add(fragment);
        this.unitID = unitID;
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0){           
            return FragmentReportHauls.newInstance(this.unitID);
        }
        else {
            return FragmentReportsDowntime.newInstance(this.unitID);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0){
            return FragmentReportHauls.PAGE_TITLE;
        }
        else {
            return FragmentReportsDowntime.PAGE_TITLE;
        }
    }
}

ViewPager Fragment

public class FragmentReportHauls extends Fragment {

    public static final String PAGE_TITLE = "Shift";

    private final String unitID;

    public FragmentReportHauls() {
    }

    // Here I want to get unitID
    public static FragmentReportHauls newInstance(String unitID) {
        FragmentReportHauls fragment = new FragmentReportHauls();
        this.unitID = unitID;
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_fragment_report_hauls, container, false); 


        return view;
    }
}
}

Upvotes: 0

Manohar
Manohar

Reputation: 23394

This is an Example where I am sending an int value from Activity to fragment via viewpager adapter

 public class MyJobsHistoryServiceProviderPagerAdapter extends FragmentPagerAdapter {

    int type;

public MyJobsHistoryServiceProviderPagerAdapter(FragmentManager fm) {
    super(fm);
}

public MyJobsHistoryServiceProviderPagerAdapter(FragmentManager fm,int type) {
    super(fm);
    this.type=type;
   }

  @Override
public Fragment getItem(int position) {

    MyJobsHistoryFragment fragment = new MyJobsHistoryFragment();
    Bundle bundle = new Bundle();
    bundle.putInt(Constants.POSITION, status);
    bundle.putInt(Constants.TYPE,type);
    fragment.setArguments(bundle);

    return fragment;
}
}

Setting ViewPager Adapter

pagerAdapter = new MyJobsHistoryServiceProviderPagerAdapter(getSupportFragmentManager(), Constants.USER_TYPE_SERVICE_PROVIDER);
  mViewPager.setAdapter(pagerAdapter);

and in fragment

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    status = getArguments().getInt(Constants.POSITION, 0);
    type = getArguments().getInt(Constants.TYPE, 0);
    return inflater.inflate(R.layout.fragment_myjobs_history, container, false);

}

Upvotes: 2

Related Questions