Android – OnClick内部gridview行

我正在尝试从gridview项目中的按钮启动一个活动,这意味着当用户点击gridview项目时它应该执行一个function,当用户点击gridview项目内的按钮时,它应该执行另一个function,让我详细说明,这是我的gridview中填充的单项布局;

        

以下是上述布局的外观:

这是上面布局的图像


这是我的适配器getview ,我尝试从中执行intent / actions;

 @Override public View getView(int position, View view, ViewGroup viewGroup) { View row = view; ViewHolder holder = new ViewHolder(); if (row == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(layout, null); holder.txtName = (TextView) row.findViewById(R.id.txtName); holder.txtPrice = (TextView) row.findViewById(R.id.studentid); holder.imageView = (CircularImageView) row.findViewById(R.id.imgFood); holder.dit = (Button) row.findViewById(R.id.editit); final ViewHolder finalHolder = holder; holder.dit.setOnClickListener(new View.OnClickListener() { String getname = finalHolder.txtName.getText().toString(); String gethandicap = finalHolder.txtPrice.getText().toString(); @Override public void onClick(View v) { // Do something Intent editintent = new Intent(context, MainActivity.class); editintent.putExtra("studentname", getname); editintent.putExtra("studentid", getID); context.startActivity(editintent); } }); row.setTag(holder); } else { holder = (ViewHolder) row.getTag(); } Sudentdb student = studentsList.get(position); holder.txtName.setText(student.getName()); holder.txtPrice.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); } return row; } 

我遇到的问题是gridview项目中的按钮没有执行任何操作,在日志中它只显示ACTION_DOWN ,因为我在项目中添加了一个按钮,项目onclick也不起作用。


编辑; 添加GRIDVIEW ONCLICK和布局

 gridView = (GridView) findViewById(R.id.gridView); list = new ArrayList(); adapter = new StudentListAdapter(this, R.layout.food_items, list); gridView.setAdapter(adapter); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { String dataFromGrid; dataFromGrid = ((TextView)(view.findViewById(R.id.txtName))).getText().toString(); Intent i = new Intent(getApplicationContext(), Student.class); i.putExtra("unfromstudent",dataFromGrid); startActivity(i); 

gridview布局(我尝试过可聚焦和可点击)

     

改变你的XML ,我已经在xml下面进行了测试,它可以与GridView一起GridView

                

您的网格视图XML将是这样的。

   

我没有足够的声誉所以我无法评论您的问题,为什么不使用带有gridLayoutManager的recyclerview? 你可以在这里看到一个基本的例子。

之后,您可以通过以下方式实施recyclerview适配器:

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

}