【发布时间】:2019-05-27 08:00:02
【问题描述】:
我有一个包含 recyclerView 的列表,其中 CardView 通过适配器可视化,并且在 CardView 中我有 8 个 textView。 到目前为止,一切都很完美,列表显示得很好。但是在对 cardView 实现 onClick 时,我遇到了以下问题, cardViews 只能在 TextView 元素下方的背景中点击,就好像它们覆盖了可点击区域
ArrayList<Maquina> maquinasList;
maquinasList=new ArrayList<>();
listaMaquinas= (RecyclerView) findViewById(R.id.lista_de_maquinas);
listaMaquinas.setLayoutManager(new LinearLayoutManager(this));
maquinasAdapter adapter= new maquinasAdapter(maquinasList);
adapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Maquina user=maquinasList.get(listaMaquinas.getChildAdapterPosition(v));
Intent intent=new Intent(ListaMaquinas.this,RegistrarMaquina.class);
Bundle bundle=new Bundle();
bundle.putSerializable("maquina",user);
intent.putExtras(bundle);
startActivity(intent);
}
});
listaMaquinas.setAdapter(adapter);
public class maquinaAdapter extends RecyclerView.Adapter<maquinaAdapter.MaquinaViewHolder> {
private ArrayList<Maquina> listaMaquinas;
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnClickListener(OnItemClickListener listener){
mListener = listener;
}
public static class MaquinaViewHolder extends RecyclerView.ViewHolder{
public TextView tipo;
public TextView marca;
public TextView modelo;
public TextView serie;
public MaquinaViewHolder(View itemView,final OnItemClickListener listener){
super(itemView);
tipo= itemView.findViewById(R.id.tipo);
marca= itemView.findViewById(R.id.marca);
modelo= itemView.findViewById(R.id.modelo);
serie= itemView.findViewById(R.id.serie);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener!=null){
int position=getAdapterPosition();
if (position!=RecyclerView.NO_POSITION){
listener.onItemClick(position);
}
}
}
});
}
}
public maquinaAdapter(ArrayList<Maquina> listaMaquina){
listaMaquinas = listaMaquina;
}
@Override
public MaquinaViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista_maquinas,parent,false);
return new MaquinaViewHolder(v,mListener);
}
@Override
public void onBindViewHolder(MaquinaViewHolder holder,int position){
Maquina currentItem = listaMaquinas.get(position);
holder.tipo.setText(currentItem.getTipo());
holder.marca.setText(currentItem.getMarca());
holder.modelo.setText(currentItem.getModelo());
holder.serie.setText(currentItem.getSerie());
}
@Override
public int getItemCount(){
return listaMaquinas.size();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:id="@+id/card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/cardview"
android:backgroundTintMode="multiply"
android:elevation="20dp"
card_view:cardBackgroundColor="@color/colorAccent"
card_view:cardCornerRadius="10dp"
card_view:cardElevation="24dp"
card_view:cardMaxElevation="20dp"
card_view:cardPreventCornerOverlap="true"
card_view:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="93dp"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/t1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp"
android:layout_marginRight="5dp"
android:background="@drawable/btnbordes"
android:text="Tipo"
android:textAlignment="center"
android:textColor="#3dffb8"
android:textSize="14sp" />
<TextView
android:id="@+id/t2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/btnbordes"
android:text="Marca"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/t3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/btnbordes"
android:text="Modelo"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/t4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="10dp"
android:background="@drawable/btnbordes"
android:text="Serie"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="227dp"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tipo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp"
android:layout_marginRight="5dp"
android:background="@drawable/text"
android:inputType="textMultiLine"
android:isScrollContainer="true"
android:maxLines="4"
android:textAlignment="center"
android:textColor="#3dffb8"
android:textSize="14sp" />
<TextView
android:id="@+id/marca"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/text"
android:inputType="textMultiLine"
android:isScrollContainer="true"
android:maxLines="4"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/modelo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/text"
android:inputType="textMultiLine"
android:isScrollContainer="true"
android:maxLines="4"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/serie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="10dp"
android:background="@drawable/text"
android:inputType="textMultiLine"
android:isScrollContainer="true"
android:maxLines="4"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
这是列表中显示的卡片视图的代码。我已经查看了适配器和其他类,我认为问题出在 CardView 配置中。 非常感谢您。
【问题讨论】:
-
请将问题的最后一部分翻译成英文。这是一个只有英文的网站。
-
请在您尝试绑定 onclicklistener 的位置添加代码。
标签: onclicklistener android-recyclerview android-cardview