为什么recyclerview棒棒糖加载一切?

时间:2017-02-02 14:17:26

标签: android android-recyclerview

我有100个项目的清单。我正在使用带有自定义适配器的recyclerview。

似乎所有项目都在导致OOM的相同时间加载,因为我正在加载大图像。

我对listview没有任何问题,因为listview不会一次加载所有内容。

我听说recyclerview会在棒棒糖上一次性加载所有内容,但我该如何解决?

  def stringToIntList(string: String) : List[Int] = {
    string.filter(o => o.isDigit || o.equals(',')).split(',').map(o => o.toInt).toList
  }

没有开始滚动输出

  

I / System.out:加载项目!!!!!!!!!!!!!!!!!

X100次

更新:

这是我的布局代码

public class ProductAdapter extends RecyclerView.Adapter<ProductViewHolder> {
    List<Produit> list;
    private Context ac;
    private int nbColumn;

    public ProductAdapter(List<Produit> list, Context ac)
    {
        this.list = list;
        this.ac = ac;
        this.nbColumn = 2;
    }

    public ProductAdapter(List<Produit> list, Context ac, int nbColumn)
    {
        this.list = list;
        this.ac = ac;
        this.nbColumn = nbColumn;
    }

    @Override
    public ProductViewHolder onCreateViewHolder(ViewGroup viewGroup, int itemType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_product,viewGroup,false);
        return new ProductViewHolder(view);
    }


    public void setNbColumn(int nb)
    {
        this.nbColumn = nb;
    }

    @Override
    public void onBindViewHolder(final ProductViewHolder myViewHolder, int position) {
        if (list != null) {
            System.out.println("LOAD ITEM!!!!!!!!!!!!");
            final Produit myObject = list.get(position);

            myViewHolder.bind(myObject);
        }
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
}

3 个答案:

答案 0 :(得分:1)

android:layout_height的{​​{1}}设置为RecyclerView或某个常量值。

修改

显然它没有帮助,因为你把它全部包裹在match_parent中。

我建议删除NestedScrollView并将NestedScrollView中的所有观点合并到另一个用作RelativeLayout

标题的布局中

答案 1 :(得分:1)

我部分地弄明白了我的问题。删除NestedScrollView后,我的Recyclerview的行为按预期工作。问题是如何将NestedScrollView和RecyclerView结合起来?

谢谢

答案 2 :(得分:0)

if (list != null)替换为if (myViewHolder != null),它将按预期工作