[英]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
? 如何能够将数据从发送到
Activity
以Fragment
的ViewPager
通过FragmentPagerAdapter
?
Thanks! 谢谢!
AppCompatActivity 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 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 ViewPager片段
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;
}
}
}
This is an Example where I am sending an int value from Activity to fragment via viewpager adapter 这是一个示例,其中我通过Viewpager适配器将Activity的int值发送到片段
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 设置ViewPager适配器
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);
}
Ok. 好。 I found solution.
我找到了解决方案。
AppCompatActivity 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 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 ViewPager片段
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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.