2016-07-07 99 views
5

我正在嘗試接收使用回調機制的RecyclerView項目的點擊次數。我已經創建OnItemClickListener接口和內部自定義適配器,我已經編寫了邏輯檢測點擊View.OnClickListener的幫助。但是,在雙擊列表中的任何項目後,我正在獲取myActivity中的回調。沒有得到任何線索這裏發生了什麼!RecyclerView單擊不起作用,但在單擊兩次時工作

代碼內活動:

mAdapter = new AppAdapter(this, mAppList, new OnItemClickListener() { 
     @Override 
     public void onItemClick(View v, int position) { 

      Toast.makeText(SelectAppActivity.this, "Hello", Toast.LENGTH_SHORT).show(); 
     } 
}); 

recyclerview.setAdapter(mAdapter); 

代碼爲接口:

public interface OnItemClickListener { 

    void onItemClick(View v, int position); 
} 

代碼自定義適配器:

public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ItemViewHolder> { 

    List<App> mAppList; 
    List<App> mFilterAppList; 
    Activity context; 
    OnItemClickListener onItemClickListener; 

    public AppAdapter(Activity context, List<App> appList, OnItemClickListener onItemClickListener) { 
     super(); 
     this.context = context; 
     this.mAppList = appList; 
     this.mFilterAppList = appList; 
     this.onItemClickListener = onItemClickListener; 
    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { 
     final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false); 

     final ItemViewHolder viewHolder = new ItemViewHolder(view); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onItemClickListener.onItemClick(v,4); 
      } 
     }); 
     return viewHolder; 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    @Override 
    public void onBindViewHolder(ItemViewHolder holder, int position) { 
     final App app = mAppList.get(position); 
     holder.name.setText(app.getmName()); 
     holder.icon.setImageDrawable(app.getmAppIcon()); 
    } 

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

    public void setFilter(List<App> appList) { 
     mAppList = new ArrayList<>(); 
     mAppList.addAll(appList); 
     notifyDataSetChanged(); 
    } 

    public static class ItemViewHolder extends RecyclerView.ViewHolder { 

     public TextView name; 
     public ImageView icon; 

     public ItemViewHolder(View view) { 
      super(view); 
      name = (TextView) itemView.findViewById(R.id.app_name); 
      icon = (ImageView) itemView.findViewById(R.id.app_icon); 
     } 
    } 
} 
+0

''的onClick方法? –

+0

對不起!但沒有讓你 – nlogn

+0

我的意思是在'view.setOnClickListener'的onClick方法中添加一個日誌並檢查它是每次調用還是隻在雙擊時調用 –

回答

1

添加點擊監聽在ItemViewHolder,它工作正常。

public static class ItemViewHolder extends RecyclerView.ViewHolder { 

    public TextView name; 
    public ImageView icon; 

    public ItemViewHolder(View view) { 
     super(view); 
     name = (TextView) itemView.findViewById(R.id.app_name); 
     icon = (ImageView) itemView.findViewById(R.id.app_icon); 

     view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //getLayoutPosition is a method of RecyclerView 
      onItemClickListener.onItemClick(v,getLayoutPosition()); 
     } 
    }); 

    } 

} 
1

從onCreateViewHolder移動你的onClickListner到onBindViewHolder

@Override 
    public void onBindViewHolder(ItemViewHolder holder, int position) { 
     final App app = mAppList.get(position); 
     holder.name.setText(app.getmName()); 
     holder.icon.setImageDrawable(app.getmAppIcon()); 

     holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
      public void onClick(View v) { 
       onItemClickListener.onItemClick(v , position); 
      } 
     }); 

    } 
1

只動的onClick在onBindViewHolder並設置單擊下面, 希望它會幫助您解決問題....

holder.icon.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    onItemClickListener.onItemClick(v,4); 
    } 
}); 
7

這個問題與我的佈局中的android:focusable =「true」有關,因爲我刪除了它,它工作正常,所有建議的答案也正常工作。謝謝,所有。

0

這些添加到R.layout.item_app_list

的父元素
android:clickable="false" 
android:focusable="false" 
上一次點擊執行