【问题标题】:RecyclerView shows only one item at first then only threeRecyclerView 一开始只显示一个项目,然后只显示三个
【发布时间】: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


【解决方案1】:

我有一种预感,你的布局 fragment_intervention_map_fragment 在你的父布局中的高度设置为匹配父级。

正确的实现是将父布局中的高度设置为 wrap_content

【讨论】:

  • 改正你说的还是一样的问题:)
  • public ViewHolder(View view) { super(view); mView = 视图; viewPager = view.findViewById(R.id.fragment_intervention_item);返回;我从不使用 return;在我看来持有者类。顺便说一句,它是做什么的?也许这就是原因
  • public InterventionItemAdapter(FragmentManager fragmentManager, Intervention intervention) { super(fragmentManager); mIntervention = 干预;返回; } 你能去掉这个回报吗?还 ?试试看能不能解决你的问题
  • 不,仍然没有。我使用 return 只是为了调试函数。 :)
  • @Override public int getCount() { return 1;也许这就是问题所在,只有 getItemCount()
猜你喜欢
  • 2019-01-26
  • 2022-01-03
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
相关资源
最近更新 更多