【发布时间】:2018-07-12 07:33:12
【问题描述】:
我在使用 FragmentPagerAdapter 时遇到问题。 我想从 View Pager 中的片段中检索数据。当我调用 getItem() 方法时,它返回一个片段,但它不会创建片段。所有片段变量均为空。我需要做什么来实例化片段? 这是我的适配器。
public class SubItemAdapter extends FragmentPagerAdapter implements Serializable {
List<Item> itemList = new ArrayList<>();
int layout;
public SubItemAdapter(FragmentManager mgr, List<? extends Item> items, int layout) {
super(mgr);
itemList.addAll(items);
this.layout = layout;
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public SubItemFragment getItem(int position) {
return SubItemFragment.newInstance(itemList.get(position), layout);
}
}
这是 viewpager 中的片段。
public class SubItemFragment extends Fragment {
Item item;
View view;
Context mContext;
private static final int RC_BARCODE_CAPTURE = 9001;
private static final String ITEM_KEY = "item";
private static final String LAYOUT_PAGER_KEY = "layout";
public static SubItemFragment newInstance(Item item, int layout) {
SubItemFragment frag = new SubItemFragment();
Bundle args = new Bundle();
args.putSerializable(ITEM_KEY, item);
args.putInt(LAYOUT_PAGER_KEY, layout);
frag.setArguments(args);
return (frag);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
int layout = getArguments().getInt(LAYOUT_PAGER_KEY);
view = inflater.inflate(layout, container, false);
item = (Item) getArguments().getSerializable(ITEM_KEY);
mContext = getContext();
/* Populate the fragment with data
. . .
*/
return (view);
}
public Item getItem() {
item.retrieve_data_and_populate_item();
return item;
}
}
我对 ViewPager 的工作原理不是很了解,但据我了解,片段在没有设置任何变量的情况下返回的原因是因为 ViewPager 没有附加片段。如何让 getItem(int position) 函数返回已初始化的片段? 如果我的问题不够清楚,或者您需要查看更多代码,请告诉我。 提前致谢。
编辑
我在父片段中设置适配器。下面是添加 ViewPager 的代码:
public class General_Fragment implements SubItemFragment.subItemListener {
private static final int LAYOUT_PAGER_KEY = R.layout.sub_form_meter_read;
private SubItemAdapter mAdapter;
private WrapViewPager mPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.workorder_detail, container, false);
meters = getMeterList();
mPager = rootView.findViewById(R.id.meter_list);
mPager.addOnPageChangeListener(getOnPageListener());
mAdapter = buildAdapter(meters);
mPager.setAdapter(mAdapter);
return rootView;
}
/*. . .*/
private SubItemAdapter buildAdapter(List<? extends Item> items) {
return new SubItemAdapter(getChildFragmentManager(), //Fragment View
items, //Item to get data from
LAYOUT_PAGER_KEY
);
}
}
我认为我的问题不在于初始化适配器,因为它确实显示,但是当我从片段中检索数据时,由于片段为空
【问题讨论】:
-
您在 ViewPager 上实际设置的适配器在哪里?
标签: android android-fragments android-viewpager fragmentpageradapter