Reputation: 37633
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
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
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