Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


OnItemClickListener y OnClickListener no funcionan para ListView

He utilizado un ListView personalizado y estoy mostrando algunos datos usando el mismo ListView.

Cuando hago clic en el elemento de vista de lista, el onClickListener no se recibe. No puedo seleccionar ningún elemento de lista.

Código de diseño:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="16dp" android:background="@drawable/list_selector" android:clickable="true" android:orientation="horizontal" android:padding="5dip" > <LinearLayout android:id="@+id/imgProperty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginRight="5dip" android:padding="3dip" > <ImageView android:id="@+id/list_image" android:layout_width="50dp" android:layout_height="50dp" android:contentDescription="@string/app_name" android:src="@drawable/ic_launcher" android:focusable="false"/> </LinearLayout> <TextView android:id="@+id/tvCity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="75dip" android:layout_toRightOf="@+id/list_image" android:paddingBottom="10dip" android:text="property" android:textColor="#040404" android:textSize="15sp" android:textStyle="bold" android:typeface="sans" /> <TextView android:id="@+id/tvprice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imgProperty" android:layout_alignLeft="@+id/tvCity" android:text="Price" android:focusable="false"/> </RelativeLayout> 

Código del adaptador:

  public class CustomListAdapter extends BaseAdapter { ArrayList<Propety> PropertiesArray; private LayoutInflater Inflater; public CustomListAdapter(ArrayList<Propety> PropertiesArray) { this.PropertiesArray=PropertiesArray; } @Override public int getCount() { // TODO Auto-generated method stub return PropertiesArray.size(); } @Override public Object getItem(int position) { return PropertiesArray.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, final ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.customlistview, parent, false); } final Propety ListArray = PropertiesArray.get(position); TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity); tvPropertyName.setText(ListArray.getName()); TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice); tvPrice.setText(ListArray.getPrice()); ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image); imgProperty.setImageResource(R.drawable.ic_launcher); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); return convertView; } } 

Código ListView:

  ListView propertylistview = (ListView) findViewById(R.id.listview); CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray); propertylistview.setAdapter(customlistview); 

ListView XML:

  <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/customview" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="24dp" android:background="@drawable/list_selector" android:textAlignment="center" > 

Custom.xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <SurfaceView android:id="@+id/surface" android:layout_width="fill_parent" android:layout_height="match_parent" /> <TextView android:id="@+id/txtangle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="115dp" android:layout_marginLeft="95dp" android:text="" /> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/customview" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="24dp" android:background="@drawable/list_selector" android:textAlignment="center" > </ListView> <view android:id="@+id/customview" android:layout_width="110dp" android:layout_height="110dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" class="com.example.samplebuapp.CustomCompass" /> <view android:id="@+id/view1" android:layout_width="110dp" android:layout_height="110dp" android:layout_above="@+id/listview" android:layout_alignParentRight="true" android:layout_marginRight="18dp" class="com.example.samplebuapp.CustomView" /> <LinearLayout android:id="@+id/rl1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/listview" android:orientation="vertical" android:focusable="false"> </LinearLayout> </RelativeLayout> 

Incluso el desplazamiento no funciona.

No soy capaz de averiguar por qué está sucediendo esto? ¿Estoy perdiendo algo?

Cualquier ayuda en la resolución de esto es apreciada.

  • SetOnItemClickListener VS setOnItemSelectedListener en ListView.
  • ¿Cómo obtener el recuento de filas en sqlite usando Android?
  • El listener de OnClick de Action Bar para el botón Inicio
  • AutoCompleteTextView detecta cuando se selecciona la entrada de la lista editada por el usuario
  • OnItemClickListener no funciona, pero OnItemLongClickListener está trabajando en GridView
  • ¿Cómo manejar el evento click en Listview en android?
  • Android - Cómo pulsar el elemento ListView mediante programación
  • Mostrar alertDialog con los botones de radio cuando haga clic en un listViewItem
  • 8 Solutions collect form web for “OnItemClickListener y OnClickListener no funcionan para ListView”

    Lo siguiente hará el trabajo en su caso.

     ListView propertylistview = (ListView) findViewById(R.id.listview); propertylistview.setOnItemClickListener( myListViewClicked ): OnItemClickListener myListViewClicked = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show(); } }; 

    No olvide quitar lo siguiente del CustomAdapter

      convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); 

    Estoy de acuerdo con Ninjia, pero debe agregar theese a código XML: Debe definir en todos los objetos secundarios en el listview de elementos (TextView, ImageView, etc.):

     android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" 

    Y para el elemento raíz RelativeLayout / LinearLayout y así, defina:

     android:clickable="false" android:descendantFocusability="blocksDescendants" android:focusable="false" android:focusableInTouchMode="false" 

    Si no los define, ellos "atraparán" el evento click. Y si tiene un adaptador ListView personalizado, solo compruebe que anula:

     @Override public boolean isEnabled(int position) { return true; } 

    Compruebe la disposición de una fila de lista una vez:

    Layout o cualquier vista no debería ser android: clickable = "true" and android: focusable = "true"

    Si es allí apenas suprime y funciona la aplicación otra vez.

    El código simple que resolvió mi problema, y ​​el método view.setOnClickListener estar dentro de mi adaptador personalizado

      view.setFocusable(false) 

    Si los eventos táctiles se interceptan dentro del diseño de celda, en el diseño de la celda personalizada, defina android:descendantFocusability="blocksDescendants" en el diseño de nivel superior de su celda. Para mí, era demasiado doloroso agregar atributos xml a cada vista individual.

    Tenga en cuenta que esto también se puede establecer en el código:

    cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

    También intenté esto con un ListView dentro de una célula, y tuve que sobreescribir onTouchEvent para conseguirlo trabajar:

     public class NoTouchListView extends ListView { @Override public boolean onTouchEvent(MotionEvent ev) { return false; } } 

    Incluso yo estaba teniendo el mismo problema, estoy teniendo la casilla de verificación, hizo lo siguiente para mascarar itemClickListener trabajo,

    Agregó las siguientes propiedades a la casilla de verificación,

     android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

    Y ItemClickListner comenzó a trabajar.

    Para obtener un ejemplo detallado, puede ir a través del enlace,

    http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

    Espero que ayude Cheers !!

    Para TextView también debe utilizar

     android:textIsSelectable="false" 

    https://developer.android.com/reference/android/widget/TextView.html#setTextIsSelectable

    Debe utilizar ListView.setOnItemClickListener() para lograr lo que desea.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.