如何在OnClick中检查RecycleView多项目查看ID

时间:2015-12-07 07:04:05

标签: android adapter android-recyclerview android-viewholder

我想为不同的RecycleView项目做不同的工作。我为RecycleView创建了自定义OnClickListener,并在我的活动中使用了它。但问题是当我想获得RecycleView项目ID表格时,它点击它返回-1。我无法检查查看ID。

RecycleView适配器:

    public class AddFoodAdapter extends  RecyclerView.Adapter<AddFoodAdapter.AddFoodApapterVH>{
    private ArrayList<FoodReviewItem> foodList = new ArrayList<>();
    OnItemClickListener onItemClickListener;


    public AddFoodAdapter(){

    }

    @Override
    public AddFoodApapterVH onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recycleview_add_food_item, parent, false);

        return new AddFoodApapterVH(itemView);
    }

    @Override
    public void onBindViewHolder(AddFoodApapterVH holder, int position) {
        holder.tvFoodTitle.setText(foodList.get(position).getFoodName());
        holder.tvFoodPrice.setText(foodList.get(position).getFoodPrice());
    }

    public void add(int position,FoodReviewItem foodItem){
        foodList.add(position,foodItem);
        notifyItemInserted(position);
    }
    public void delete(int position){
        foodList.remove(position);
        notifyItemRemoved(position);
    }

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

    public class AddFoodApapterVH extends RecyclerView.ViewHolder implements View.OnClickListener{
        public ImageView ivEditFoodItem;
        public TextView tvFoodTitle;
        public RatingBar rbFoodRating;
        public ImageView ivDeleteFoodItem;
        public TextView tvFoodPrice;

        public AddFoodApapterVH(View itemView) {
            super(itemView);

            ivEditFoodItem = (ImageView) itemView.findViewById(R.id.ivEditFoodItem);
            tvFoodTitle = (TextView) itemView.findViewById(R.id.tvAddFoodItemTitle);
            rbFoodRating = (RatingBar) itemView.findViewById(R.id.rbAddFoodItemRating);
            ivDeleteFoodItem = (ImageView) itemView.findViewById(R.id.ivDeleteFoodItem);
            tvFoodPrice = (TextView) itemView.findViewById(R.id.tvAddFoodItemPrice);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if(onItemClickListener!=null){
                onItemClickListener.onItemClick(v, getAdapterPosition());
            }
        }
    }

    public interface OnItemClickListener {
        public void onItemClick(View view , int position);
    }

    public void SetOnItemClickListener(final OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

}

表格活动:

    private void setUpFoodItemApapter() {
        foodItemRecyclerView = (RecyclerView) findViewById(R.id.rvFoodItems);
        addFoodAdapter = new AddFoodAdapter();
        final LinearLayoutManager layoutManager = new org.solovyev.android.views.llm.LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        foodItemRecyclerView.setLayoutManager(layoutManager);
        foodItemRecyclerView.addItemDecoration(new DividerItemDecoration(this, null));
        foodItemRecyclerView.setAdapter(addFoodAdapter);
        addFoodAdapter.SetOnItemClickListener(new AddFoodAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.i("getid",""+view.getId()); //return -1
                Log.i("getid",""+R.id.ivDeleteFoodItem); //return id

                // not working
                if(view.getId() == R.id.ivDeleteFoodItem){
                    addFoodAdapter.delete(position);
                }
            }

        });
    }

1 个答案:

答案 0 :(得分:-1)

addFoodAdapter.SetOnItemClickListener(new AddFoodAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
             ImageView iv = (ImageView)view;// get imageView
             int id = iv.getId();

            if(id == R.id.ivDeleteFoodItem){ 
                addFoodAdapter.delete(position);
            }
        }

    });