簡體   English   中英

計算對RecyclerView的點擊次數

[英]Count the clicks on an item of RecyclerView

我正在開發一個使用RecyclerView的android應用程序。 假設我在RecyclerView有6個項目,即[A, B, C, D, E, F] 那么,如何獲得這些項目的點擊次數呢?

例如:

如果用戶打開項目B 4次。 如何獲得count = 4

僅當用戶單擊同一項目時,PS count應增加。

首先為每個項目聲明靜態計數變量

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++;
    }

}

在持有人

itemView.setOnClickListener(){

    onClick(){
        // count up
    }
}

每個項目還需要一個id才能知道,它是哪個項目

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

您還應該將充當點擊偵聽器的接口傳遞給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);   } 
         }

最后,clicksMap將包含回收站中項目每個位置的點擊計數。

我舉了一個例子

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;
}

}

CustomAdapterCustomViewHolder用於recyclerview

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);
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM