5

Estoy tratando de establecer un onItemClickListener con un adaptador personalizado y una configuración de vista de lista. Parece que no puede hacer que el oyente funcione. No creo que lo esté configurando correctamente. Cualquier ayuda es apreciada. Muchas gracias.onItemClickListener con adaptador personalizado y listview

adaptador:

public class ModuleAdapter extends ArrayAdapter<Module> { 

Context context; 
int layoutResourceId; 
Module data[]; 

public ModuleAdapter(Context context, int layoutResourceId, 
     Module data[]) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ModuleHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ModuleHolder(); 
     holder.modJapTitle = (TextView)row.findViewById(R.id.moduleJapTitle); 
     holder.modEngTitle = (TextView)row.findViewById(R.id.moduleEngTitle); 
     holder.modComp = (TextView)row.findViewById(R.id.moduleCompletion); 
     holder.modRating = (RatingBar)row.findViewById(R.id.moduleScore); 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ModuleHolder)row.getTag(); 
    } 

    Module module = data[position]; 
    holder.modJapTitle.setText(module.moduleJapaneseTitle); 
    holder.modEngTitle.setText(module.moduleEnglishTitle); 
    holder.modComp.setText(module.moduleCompletionRate); 
    holder.modRating.setRating(module.moduleRating); 

    return row; 
} 

static class ModuleHolder 
{ 
    TextView modEngTitle; 
    TextView modJapTitle; 
    TextView modComp; 
    RatingBar modRating; 
} 

}

Implementación:

ModuleAdapter moduleData = new ModuleAdapter(this, R.layout.module_box_item, module_data); 
    ListView listView1 = (ListView)findViewById(R.id.moduleListContainer); 
    listView1.setAdapter(moduleData); 
    listView1.setCacheColorHint(Color.TRANSPARENT); 
    listView1.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.v("Module Item Trigger", "Module item was triggered"); 
      Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

También aquí se encuentra el diseño de XML para uno de los elementos individuales de la lista:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/moduleBox" 
android:id="@+id/moduleBoxSingle" > 

<TextView 
    android:id="@+id/moduleJapTitle" 
    style="@style/moduleTitleJap" /> 
<TextView 
    android:id="@+id/moduleCompletion" 
    android:layout_above="@+id/moduleSepartor" 
    style="@style/moduleCompletion" /> 
<View 
    android:id="@+id/moduleSepartor" 
    android:layout_below="@+id/moduleJapTitle" 
    style="@style/moduleSeperator" /> 
<TextView 
    android:id="@+id/moduleEngTitle" 
    android:layout_below="@+id/moduleSepartor" 
    style="@style/moduleTitleEng" /> 
<RatingBar 
    android:id="@+id/moduleScore" 
    android:layout_below="@+id/moduleSepartor" 
    style="@style/moduleRating" 
    android:layout_alignParentRight="true" /> 

</RelativeLayout> 
+1

Todo parece verse bien. Tal vez es un problema de UI? ¿Por qué no escribes en Logcat en lugar de mostrar un Toast? Solo para estar 100% seguro de que no se está llamando a tu oyente. –

+1

puede publicar su diseño xml aquí. – rajpara

+1

Hola, gracias por tu respuesta. He agregado en la línea para escribir a Logcat. Y también he agregado en el diseño XML utilizado para cada elemento de la lista individual. – mwrazam

Respuesta

16

Creo que es el problema similar al this.

Añadir a continuación código a su TextView en el XML

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

y vuelva a intentarlo.

+3

¡Esto hizo el truco! Muchas gracias. Mucho pelo ahorrado :) – mwrazam

4

Primero de todos para esto tienes que impliments la clase con el siguiente controlador

implements OnItemClickListener 

continuación, agregue una función como se indica a continuación onItemClick()

public void onItemClick(AdapterView parent, View v, int position, long id) { 
    Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show(); 
} 

Y cuando nos fijamos el adaptador de datos a la listview a continuación, añadir la siguiente línea de código

itemlist.setOnItemClickListener(this); 

la esperanza que esto funcionará para usted ...

+1

Hola, gracias por tu respuesta.Lo intenté, pero el resultado fue el mismo que el código original que tengo arriba. ¿Quizás algo más está mal con mi código que no está disparando a ese oyente? – mwrazam

1

Prueba esto ...

ListView lv = (ListView)findViewById(R.id.Your_ListView_Id); // If it extends Activity. 

O

ListView lv = getListView; // If it extends ListActivity. 
lv.setOnItemClickListener(this); // Make the Activity implement onItemClickListener 
lv.setAdapter(your_adapter); 

Editado parte: cambio realizado en el contexto de la tostada, y Agregado SYSOUT

// El método que controlará los eventos.

public void onItemClick(AdapterView parent, View v, int position, long id{ 
    Toast.makeText(Your_Activity_Name.this, "hello", Toast.LENGTH_SHORT).show(); 
    System.out.println("This is a Test"); 
} 

COMPROBAR que se conecte .. ¿El documento se imprime SYSOUT !!

+1

Hola, gracias por tu mensaje. Desafortunadamente, esto tampoco funciona. El mensaje de brindis aún no se está disparando. – mwrazam

+1

Solo un minuto ....... intente esto ... Toast.make Toast.makeText (Your_Activity_Name.this, "hello", Toast.LENGTH_SHORT) .show(); –

2

Tengo mismo problema y yo lo fijan por me gusta: (refiérase a partir https://github.com/sephiroth74/HorizontalVariableListView/issues/33) añadir esta línea a la vista de la raíz en la disposición

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/moduleBox" 
android:id="@+id/moduleBoxSingle" 
android:descendantFocusability="blocksDescendants" > 
Cuestiones relacionadas