在GridView中替换项目

时间:2018-03-14 09:03:48

标签: java android firebase gridview firebase-realtime-database

我有gridview使用FirebaseRecyclerAdapter的9个项目。我想用新的图片网址随机替换3个项目:

grid = new SpanningGridLayoutManager(MainActivity.this, 3);
memePreview.setLayoutManager(grid);
recyclerAdapter = new FirebaseRecyclerAdapter<MemeAdapter, mViewHolder>(MemeAdapter.class, R.layout.meme_preview,
        mViewHolder.class, reference.limitToLast(9).orderByChild("time")) {
    @Override
    protected void populateViewHolder(final mViewHolder viewHolder, final MemeAdapter model, final int position) {
        viewHolder.memePreview(model.getImage(), getApplicationContext());
    }
};
memePreview.setAdapter(recyclerAdapter);

Meme适配器

public class MemeAdapter {

    private String image, user, tag;
    private long lols, down , time;

    public MemeAdapter(String image, String tag, String user){
        this.image = image;
        this.tag = tag;
        this.user = user;
        this.lols = 0;
        this.down = 0;
        this.time = new Date().getTime() * -1;
    }

    public MemeAdapter(){}

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
} //more getters and setters

延长GridLayoutManager以使其适合屏幕中的所有项目

SpanningGridLayoutManager.java

我想要在List<String>

中插入图片网址

如何更换这些图像?以下是我的观点:

enter image description here

1 个答案:

答案 0 :(得分:2)

试试这个。

 public int[] generateRandomPositions(){
    int[] positions = new int[3];
    Random r = new Random();
    int i1 = r.nextInt(8);
    positions[0] = i1;
    step1:
    do{
        i1 = r.nextInt(8);
    }while(positions[0] == i1);
    positions[1] = i1;
    do{
        i1 = r.nextInt(8);
    }
    while(positions[1] == i1  || positions[0] == i1);
    positions[2] = i1;
    return positions;
}

然后在需要更新gridView时使用它

    // rest of the code
    arrayList.remove(positions[0]);
    arrayList.put(positions[0], url1);
    adapter.notifyItemInserted(positions[0])

    arrayList.remove(positions[1]);
    arrayList.put(positions[1], url2);
    adapter.notifyItemInserted(positions[1])

    arrayList.remove(positions[2]);
    arrayList.put(positions[2], url3);
    adapter.notifyItemInserted(positions[2])
    // rest of the code