Android - OnClick inside gridview row

前端 未结 2 813
梦如初夏
梦如初夏 2021-01-26 04:19

I\'m trying to launch a activity from a button inside my gridview item, meaning that when user click on gridview Item it should do one function and when the user click on the bu

2条回答
  •  囚心锁ツ
    2021-01-26 04:51

    I don't have enough reputation so i can't comment your question, why don't you use a recyclerview with a gridLayoutManager? You can see a basic example here .

    After that you can implement your recyclerview adapter this way:

    public class StudentsAdapter extends RecyclerView.Adapter {
    
    private final OnStudentItemClickListener mListener;
    private Context mContext;
    private List mStudents;
    
    public StudentsAdapter(Context context, List items, OnStudentItemClickListener listener) {
        mContext = context;
        mStudents =items;
        mListener = listener;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_student, parent, false);
        return new ViewHolder(view);
    }
    
    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        Student student = mStudents.get(position);
    
        holder.mTextName.setText(student.getName());
        holder.mTextPrice.setText(student.getID());
    
        if (student.getImage() != null && student.getImage().length > 0) {
            Glide.with(context)
                    .load(student.getImage())
                    .into(holder.imageView);
        } else {
            holder.imageView.setImageBitmap(null);
        }
    }
    
    @Override
    public int getItemCount() {
        return mStudents.size();
    }
    
    
    public interface OnStudentItemClickListener {
        void onStudentItemClick(Student student);
        void onStudentButtonClick(Student student);
    }
    
    public class ViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener {
        TextView mTextName;
        TextView mTextPrice;
        CircleImageView mImageView;
        Button mDit;
    
        public ViewHolder(View view) {
            super(view);
    
            mTextName = (TextView) view.findViewById(R.id.txtName);
            mTextPrice = (TextView) view.findViewById(R.id.studentid);
            mImageView = (CircleImageView) view.findViewById(R.id.imgFood);
            mDit = (Button) view.findViewById(R.id.editit);
            mDit.setOnClickListener(view1 -> {
                if (null != mListener) {
                    mListener.onStudentButtonClick(mStudents.get(getAdapterPosition()));
                }
            });
            itemView.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            if (null != mListener) {
                mListener.onStudentItemClick(mStudents.get(getAdapterPosition()));
            }
        }
    }
    

    }

提交回复
热议问题