使用Glide与RecyclerView和GridLayout。无法在滚动条件上加载图片?

时间:2018-03-13 18:05:37

标签: android android-recyclerview android-glide

我正在尝试使用Glide加载我的图片时实施RecyclerView。但由于某种原因,它只会加载最初的几张图像来填充屏幕,但在滚动时,它不会继续加载新图像。

请注意,我正在使用一个包含片段的活动,并且在该片段中是我拥有RecyclerView的地方。

以下是我如何实施此RecyclerView的代码。

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    // inflate the view used for this fragment
    View rootView = inflater.inflate(R.layout.fragment_monster_list, container, false);

    // getting reference to the monster list recyclerview.
    mMonsterListRV = (RecyclerView) rootView.findViewById(R.id.rv_monster_list);

    // Create the recyclerview for the monster list fragment
    mMonsterListAdapter = new MonsterListAdapter(getContext(), this);
    mMonsterListRV.setAdapter(mMonsterListAdapter);

    mGridLayoutManager = new GridLayoutManager(getContext(), 2,
            GridLayoutManager.VERTICAL, false);
    mMonsterListRV.setLayoutManager(mGridLayoutManager);

    return rootView;
}

这是我的适配器的代码,直到onBindViewHolder

public class MonsterListAdapter extends RecyclerView.Adapter<MonsterListAdapter.MonsterListViewHolder> {

// create member variable for list of monster icons
private int[] mMonsterIconList;
private Context mContext;
private OnClickHandler mOnClickHandler;

//  create interface for onclick
public interface OnClickHandler {
    void onClick(int monsterSelected);
}

public MonsterListAdapter (Context context, OnClickHandler onClickHandler) {
    mMonsterIconList = DataUtilities.getMonsterIconList();
    mContext = context;
    mOnClickHandler = onClickHandler;
}


@Override
public MonsterListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // inflate the view holder
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recyclerview_monster_list, parent, false);

    MonsterListViewHolder viewHolder = new MonsterListViewHolder(view);

    return viewHolder;
}

@Override
public void onBindViewHolder(MonsterListViewHolder holder, int position) {

    // Glide implementation
    Glide.with(mContext).load(mMonsterIconList[position]).into(holder.mMonsterIcon);

}

1 个答案:

答案 0 :(得分:0)

我似乎已经解决了这个问题。我不完全明白是什么造成的,但这就是我的所作所为。

将我的所有图像重新缩放到(200,200)后,所有图像再次正确加载。

我认为是由此造成的: 首先,我对android dev非常新,事实上我之前没有任何编程经验,所以我在下面会说的是纯粹的猜测。

当我尝试用毕加索替换Glide时,我会出现内存不足的错误。只有在将图像调整到(200,200)之后才开始正常工作。然后我用Glide做了同样的事情,制作了图像(200,200),它开始按预期工作。

所以我的猜测是,我的图片太大,在回收者视图中加载时可能会造成某种内存问题。