【发布时间】:2018-01-11 04:57:05
【问题描述】:
如何通过FragmentPagerAdapter 将数据从Activity 发送到ViewPager 的Fragment?
谢谢!
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 片段
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;
}
}
}
【问题讨论】:
-
您是否尝试过使用接口。 ?
-
您想在滚动或特定片段期间传递关于哪个片段意味着的数据?为什么通过 FragmentPagerAdapter ?为了方便您使用界面。
-
您可以像这样使用
Yourfragment.newInstance(String xyz)在片段的构造函数中简单地传递您想要的数据,或者您可以实现interface回调以发送和接收数据。 -
在视图寻呼机适配器中创建另一个构造函数并通过构造函数将数据传递给它,并从视图寻呼机适配器通过捆绑参数将数据发送到片段
-
@HemantParmar 我想将数据
unitID传递给两个片段。
标签: java android android-fragments android-activity