我在Activity中使用TabLayout + ViewPager + Fragment,当我输入Activity时,第一个片段没有显示数据,但我滚动到第二个片段然后滚动到第三个片段,我滚动到第一个片段再次片段化,第一个片段显示数据。我不知道为什么会这样。我尝试将FragmentPagerAdapter
更改为FragmentStatePagerAdapter
,但它无效。以下是我的代码:
titles = new ArrayList<>();
titles.add("未使用");
titles.add("已使用");
titles.add("已失效");
fragments = new ArrayList<>();
fragments.add(new TicketUnuseFragment());
fragments.add(new TicketUseFragment());
fragments.add(new TicketInvalidFragment());
tabLayout = (TabLayout) findViewById(R.id.award_tablayout);
viewPager = (ViewPager) findViewById(R.id.award_view_pager);
viewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
FragmentStatePagerAdapter
public class FragmentAdapter extends FragmentStatePagerAdapter {
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
TicketUnuseFragment代码:
ublic class TicketUnuseFragment extends AbsFragment {
private RecyclerView recyclerView;
private AwardCenterRecyclerViewAdapter recyclerAdapter;
@Override
public void onServerMessage(Message msg) {
if (msg.obj != null) {
IResponseVO iResponseVO = (IResponseVO) msg.obj;
if (iResponseVO.getServerCode().equals(ServerCode.PatientCouponList)) {
if (HttpClient.RESULT_OK == iResponseVO.getStatus()) {
AwardCenterListResponse mpRespBean = (AwardCenterListResponse) iResponseVO;
recyclerAdapter.setData(mpRespBean.getList());
recyclerAdapter.notifyDataSetChanged();
}
}
}
}
@Override
protected View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_ticket_unused, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.unuse_ticket_recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
recyclerAdapter = new AwardCenterRecyclerViewAdapter(mActivity);
recyclerView.setAdapter(recyclerAdapter);
return view;
}
@Override
protected void initVariables() {
}
@Override
protected void loadData() {
try {
RwardCenterRequest requestBean = new RwardCenterRequest();
requestBean.setTabType(1);
requestBean.setPage(0);
HttpClient.getInstance(mActivity).requestTextByPost(mActivity, requestHandler, ServerCode.PatientCouponList, requestBean);
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
要显示的选项卡的填充是通过TabLayout.Tab实例完成的。 所以在获取TabLayout引用之后的主代码中添加这些行。
tabLayout.addTab(tabLayout.newTab().setText("未使用""));
tabLayout.addTab(tabLayout.newTab().setText("已使用"));
tabLayout.addTab(tabLayout.newTab().setText("已失效"));