I'm tearing my hair apart, I'm almost bold ! I'm using a Recyclerview to show a list and each item is a Viewpager for i need each to swipe between information fragments for each item. The thing is that on loading the fragment, there is only one item loaded, but i can scroll bottom and when I come back to top, only three items are displayed. I am completely lost !
Here is my code ! :)
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;
}
}
If you want to see the weird results : Here it is !
On load, there is one item
And if I scroll bottom and go up there are three...
UPDATE : It appears that the problem comes from the ViewPager called only. The viewpager does not always load, it loads either one or only three.
Ideas ?
I have a hunch that your layout fragment_intervention_map_fragment the height in your parent layout is set to match parent.
the correct implementation is set your height in your parent layout to wrap_content
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.