计算RecyclerView项目的点击次数

时间:2017-07-13 10:34:32

标签: android android-recyclerview

我正在开发一个Android应用程序,其中我使用RecyclerView。假设我的RecyclerView中有6个项目,即[A, B, C, D, E, F]。那么如何获得这些项目的点击次数呢?

例如:

如果用户打开项目B 4次。我怎样才能获得count = 4

P.S。只有当用户点击相同的项时,count才会增加。

4 个答案:

答案 0 :(得分:1)

首先为每个项目声明静态计数变量

private static int aCount = 0;

然后在你的onBindViewHolder中,在按钮点击你的位置id之后传递一个方法。

public void onBindViewHolder(ItemAdapter.ViewHolder holder, int position) {

    holder.button.setOnClickListener(new View.OnClickListener() {
           @Override
               public void onClick(View v) {

                    thisWasClicked(position);

               }
    }
}

方法将是这样的

private void thisWasClicked(int position) {

    if (position == 0) {
        aCount++;
    }

}

答案 1 :(得分:0)

持有人

itemView.setOnClickListener(){

    onClick(){
        // count up
    }
}

每个项目还需要id才能知道它是哪个项目

答案 2 :(得分:0)

您可以在适配器中创建Map<Integer, Integer> clicksMap = new HashMap<>()

您还应该将接口传递给充当Click Listener的ViewHolder。像。的东西。

public interface OnItemLick { 
 void onItemClick(int position, int id);
}

然后在适配器中声明此接口的实例。

    OnItemLick listener = new OnItemClick() {   
        void onItemClick(int position, int id) {
          //you can either use the item position or an id (if you have an unique one for the items). I will show an example using the position.
          int count;
          if(clicksMap.contains(position)) { 
            count = clickMap.get(position);
            count ++;
            clickMap.put(position, count);
          }else {
            count ++;
            clickMap.put(position, count);   } 
         }

最后,您点击地图将包含回收商中每个商品位置的点击次数。

答案 3 :(得分:0)

我做了一个例子

CustomItem 对象

public class CustomItem {

private String item;
private int click;

public String getItem() {
    return item;
}

public void setItem(String item) {
    this.item = item;
}

public int getClick() {
    return click;
}

public void setClick(int click) {
    this.click = click;
}

}

recyclerview的

CustomAdapter CustomViewHolder

public class CustomAdapter extends RecyclerView.Adapter{

private List<CustomItem> itemList;

public CustomAdapter(List<CustomItem> itemList){
    this.itemList = itemList;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new CustomViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.viewholder_generic, parent, false));;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
         //increase click count for the current item
         itemList.get(holder.getAdapterPosition()).setClick(itemList.get(holder.getAdapterPosition()).getClick() + 1);
        }
    });
}

@Override
public int getItemCount() {
    return itemList.size();
}

// Custom ViewHolder
public class CustomViewHolder extends RecyclerView.ViewHolder {

    //add fields you need

    public CustomViewHolder(View itemView) {
        super(itemView);
    }
}
}