5

Ich versuche, einen OnItemClickListener mit einem benutzerdefinierten Adapter und Listview-Setup festzulegen. Ich kann nicht scheinen, dass der Hörer funktioniert. Ich denke nicht, dass ich es richtig aufstelle. Jede Hilfe wird geschätzt. Vielen Dank.onItemClickListener mit benutzerdefiniertem Adapter und Listenansicht

Adapter:

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

}

Umsetzung:

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

Auch hier ist die XML-Layout für eine der einzelnen Elemente in der Liste:

<?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

Alles gut aussehen erscheint. Vielleicht ist es ein UI-Problem? Warum schreibst du nicht in Logcat, anstatt einen Toast zu öffnen? Nur um 100% sicher zu sein, dass Ihr Hörer nicht angerufen wird. –

+1

können Sie Ihr Layout-XML hier posten. – rajpara

+1

Hallo, danke für deine Antwort. Ich habe in der Zeile hinzugefügt, um Logcat zu schreiben. Und ich habe auch das XML-Layout für jeden einzelnen Listeneintrag hinzugefügt. – mwrazam

Antwort

16

Ich denke, es ist das ähnliche Problem wie this.

hinzufügen unten Code in Ihre TextView in der XML-

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

und versuchen Sie es erneut.

+3

Das hat den Trick gemacht! Ich danke dir sehr. Viele Haare gerettet. :) – mwrazam

4

Zunächst einmal für diese haben Sie die Klasse mit dem folgenden Handler unter onItemClick()

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

Und

implements OnItemClickListener 

dann eine Funktion hinzufügen, um gegeben impliments, wenn wir den Datenadapter zum listview fügen Sie dann die folgende Zeile gesetzt Code

itemlist.setOnItemClickListener(this); 

Hope this für Sie arbeiten ...

+1

Hallo, danke für deine Antwort.Ich habe es versucht, aber das Ergebnis war das gleiche wie der ursprüngliche Code, den ich oben habe. Vielleicht stimmt etwas anderes mit meinem Code nicht, der diesen Hörer nicht auslöst? – mwrazam

1

Versuchen Sie, diese ...

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

ODER

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

Edited Teil: Änderung in Toast Kontext und hinzugefügt SYSOUT

// Die Methode, die die Ereignisse behandelt.

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

PRÜFEN SIE LOG .. DOES bekommt die SYSOUT STATEMENT BEDRUCKTER !!

+1

Hallo, danke für deine Nachricht. Leider funktioniert das auch nicht. Die Toast-Nachricht wird immer noch nicht ausgelöst. – mwrazam

+1

Nur ein min ....... versuchen Sie das .. Toast.make Toast.makeText (Your_Activity_Name.this, "Hallo", Toast.LENGTH_SHORT) .show(); –

2

Ich habe gleiches Problem und ich das Problem beheben, indem Sie mag: (siehe aus https://github.com/sephiroth74/HorizontalVariableListView/issues/33) diese Linie im Hinblick auf Layout root hinzufügen

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