【发布时间】:2018-08-09 08:39:48
【问题描述】:
我把头发扯断了,我几乎是大胆的! 我正在使用 Recyclerview 来显示一个列表,每个项目都是一个 Viewpager,因为我需要每个项目在每个项目的信息片段之间滑动。 问题是在加载片段时,只加载了一项,但我可以滚动底部,当我回到顶部时,只显示三项。 我完全迷路了!
这是我的代码! :)
ListIntervention.java
public class ListInterventionAdapter extends RecyclerView.Adapter<ListInterventionAdapter.ViewHolder> {
private final List<Intervention> mValues;
private FragmentManager mFragment;
public ListInterventionAdapter(FragmentManager context, List<Intervention> items) {
mValues = items;
mFragment = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_intervention, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Intervention intervention = mValues.get(position);
holder.viewPager.setAdapter(new InterventionItemAdapter(mFragment, intervention));
}
@Override
public int getItemCount() {
return mValues.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public Intervention mItem;
public ViewPager viewPager;
public ViewHolder(View view) {
super(view);
mView = view;
viewPager = view.findViewById(R.id.fragment_intervention_item);
return;
}
}
}
InterventionItemAdapter.java
public class InterventionItemAdapter extends FragmentStatePagerAdapter {
private Intervention mIntervention;
public InterventionItemAdapter(FragmentManager fragmentManager, Intervention intervention) {
super(fragmentManager);
mIntervention = intervention;
return;
}
@Override
public Fragment getItem(int i) {
Fragment interventionFragment;
switch (i) {
case 0:
interventionFragment = InterventionMapFragment.newInstance(mIntervention.getId());
break;
case 1:
interventionFragment = InterventionInfoFragment.newInstance(i);
break;
case 2:
interventionFragment = InterventionBlocNote.newInstance(i);
break;
default:
interventionFragment = InterventionMapFragment.newInstance(i);
break;
}
return interventionFragment;
}
@Override
public int getCount() {
return 1;
}
}
InterventionMapFragment.java
public class InterventionMapFragment extends Fragment {
private View currentView;
private Integer interventionId;
public InterventionMapFragment() {
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
currentView = inflater.inflate(R.layout.fragment_intervention_map_fragment, container, false);
return currentView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView text = currentView.findViewById(R.id.fragment_intervention_map);
text.setText("MAP " + Integer.toString(this.getArguments().getInt("pos")));
return;
}
public static InterventionMapFragment newInstance(Integer i) {
Bundle args = new Bundle();
args.putInt("pos", i);
InterventionMapFragment fragment = new InterventionMapFragment();
fragment.setArguments(args);
return fragment;
}
}
如果你想看到奇怪的结果:这里就是!
加载时,只有一项
如果我滚动底部并向上滚动,则会出现三个......
更新:问题似乎来自仅调用的 ViewPager。 viewpager 并不总是加载,它加载一个或只加载三个。
想法?
【问题讨论】:
-
你能在适配器中显示你的布局
fragment_intervention吗? -
你为什么把
1返回到InterventionItemAdapter里面的getCount? -
第 1 个参数只是为了将 viewpager 限制为一个视图(检查 getItem)它是 ViewPager 中的页数 :)
-
我想知道,会不会是 LinearLayoutManager 的问题?
-
我真的不认为将 ViewPager 放在 RecyclerView 中是个好主意....我认为您绝对应该考虑更改您的实现。
标签: java android android-recyclerview android-viewpager