PDA

Ver la Versión Completa : [ SOLUCIONADO ] problema con CardView


rafaxplayer
21/10/14, 08:04:40
Saludos compañeros , estoy utilizando cardview con recyclerview en una de mis app , pero tengo problemas con el clicklistener y aplicarle un selectable a la cardview , el tema es que los elementos hijos de la card quedan en primer plano y tanto el listener como el selectable que le aplico no funcionan porque anida un par de linerlayout, esto no pasa en los listview de siempre.
este es mi xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"

android:clickable="false"
android:orientation="horizontal"
android:padding="3dp">

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/item_selector"
android:clickable="true"
card_view:cardCornerRadius="4dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"

android:focusable="false">

<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:padding="2dp">

<TextView
android:id="@+id/textname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#040404"
android:textStyle="bold" />

<TextView
android:id="@+id/textType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#343434" />

<TextView
android:id="@+id/textSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#343434" />

</LinearLayout>

<ImageButton
android:id="@+id/imageInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="true"
android:src="@drawable/ic_action_overflow" />
</LinearLayout>

</android.support.v7.widget.CardView>


</LinearLayout>

y este donde esta el listener que como digo funciona pero el problema es que el view esta en ultimo plano y como tiene forma con radius quiero que el selectable y el click se aplique a el y no a los linearlayout hijos:

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView txtfile;
public TextView txttype;
public TextView txtsize;
public ImageButton infobtn;

public ViewHolder(View v) {
super(v);
txtfile = (TextView) v.findViewById(R.id.textname);
txttype = (TextView) v.findViewById(R.id.textType);
txtsize = (TextView) v.findViewById(R.id.textSize);
infobtn = (ImageButton) v.findViewById(R.id.imageInfo);
v.setOnClickListener(this);

}

@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "OnItemClick :D", Toast.LENGTH_SHORT).show();
}

}

También decir que el imagebutton tiene clicklistener y funciona y ademas no esta en focusable = true ya que esto daba ese tipo de problemas .

Un saludo.

rafaxplayer
22/10/14, 14:46:27
Bueno en vista del éxito ...XD
he encontrado la solución y la comparto con vosotros , resulta que el cardview este si tiene layout hijos como contenedores entonces no se apaecían los selectores aunque los establezcas como background.
al final mi solucion ha sido aplicar el selector tanto a cardview como la layout hijo y establecer carview como clickable , despues en el layouthijo establecer android:duplicateParentState="true" , con esto el selectable funciona para mi , si sabéis alguna forma menos truquera que esta la compartís.

mi xml ha quedado asi:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_margin="5dp"
card_view:cardCornerRadius="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/item_selector"
android:id="@+id/card_view"
android:clickable="true">

<LinearLayout
android:focusable="false"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal"
android:background="@drawable/item_selector"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"

android:duplicateParentState="true">

<LinearLayout
android:id="@+id/linearLayout1"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="wrap_content"
android:orientation="vertical"
android:padding="2dp">

<TextView
android:id="@+id/textname"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#040404"
android:textStyle="bold" />

<TextView
android:id="@+id/textType"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#343434" />

<TextView
android:id="@+id/textSize"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#343434" />

</LinearLayout>

<ImageButton
android:background="@null"
android:clickable="true"
android:id="@+id/imageInfo"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/ic_action_overflow" />
</LinearLayout>

</android.support.v7.widget.CardView>