簡體   English   中英

RecyclerView最初只顯示一個項目,然后僅顯示三個項目

[英]RecyclerView shows only one item at first then only three

我正在把頭發扯開,我幾乎是大膽的! 我正在使用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_map_fragment父級布局中的高度設置為與父級匹配。

正確的實現方式是將父布局中的高度設置為wrap_content

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM