Android - OnClick inside gridview row

前端 未结 2 814
梦如初夏
梦如初夏 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<StudentsAdapter.ViewHolder> {
    
    private final OnStudentItemClickListener mListener;
    private Context mContext;
    private List<Student> mStudents;
    
    public StudentsAdapter(Context context, List<Student> 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()));
            }
        }
    }
    

    }

    0 讨论(0)
  • 2021-01-26 04:56

    Change you XML, i have tested below xml its works fine with GridView

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:foreground="?android:attr/selectableItemBackground"
        android:orientation="horizontal"
        app:cardCornerRadius="5dp"
        app:cardElevation="3dp"
        app:cardPreventCornerOverlap="false"
        app:cardUseCompatPadding="true">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:orientation="horizontal">
    
    
            <com.mikhaellopez.circularimageview.CircularImageView
                android:id="@+id/imgFood"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:layout_margin="10dp"
                app:civ_border_color="#ffffff"
                app:civ_border_width="2dp"
                app:civ_shadow="true"
                app:civ_shadow_color="#000000"
                app:civ_shadow_radius="10" />
    
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_weight="1"
                android:gravity="center_horizontal|center_vertical"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/txtName"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_marginStart="5dp"
                    android:text="Name"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textSize="16sp" />
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">
    
                    <TextView
                        android:id="@+id/currentid"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/txtName"
                        android:layout_marginLeft="5dp"
                        android:layout_marginStart="5dp"
                        android:text="Current ID : "
                        android:visibility="visible" />
    
                    <TextView
                        android:id="@+id/studentid"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/txtName"
                        android:layout_marginEnd="30dp"
                        android:layout_marginRight="30dp"
                        android:layout_toRightOf="@+id/currentid"
                        android:text="ID"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:textSize="16sp" />
                </LinearLayout>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="30dp"
                android:layout_height="30dp">
    
                <Button
                    android:id="@+id/editit"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_gravity="end"
                    android:background="@android:drawable/btn_dialog"
                    android:focusable="false" />
    
    
            </LinearLayout>
    
        </LinearLayout>
    
    
    </android.support.v7.widget.CardView>
    

    Your Grid View XML will be Like this.

    <GridView
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:focusable="true">
    
        </GridView>
    
    0 讨论(0)
提交回复
热议问题