2009-10-05 18 views
19

Ich habe eine benutzerdefinierte ListView durch Erweitern LinearLayout für jede Zeile implementiert. Jede Zeile hat ein kleines Thumbnail, einen Text und eine check box. Die list view wird ordnungsgemäß bereitgestellt und ich kann ohne Probleme scrollen und schleudern.setOnItemClickListener() funktioniert nicht auf benutzerdefinierte ListView @ Android

Aber die ListView scheint nicht auf die setOnItemClickListener() überhaupt zu reagieren, also musste ich eine Abhilfe finden, indem Sie in jeder Zeile klicken Zuhörer im getView() der Texteinstellung, die offensichtlich Problem zu schaffen, wenn ich versuche, wieder zu verwenden die adapter. Hat jemand eine Lösung?

Antwort

43

Versuchen Sie, diese
Für Listview,

final ListView list = (ListView) findViewById(R.id.list); 
list.setItemsCanFocus(false); 

Auch darauf achten, dass für CheckBox innerhalb Listenelement fokussierbarem falsch

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

Ich bin mit dem gleichen Problem, die oben genannte Lösung funktioniert für Klicks auf der Zeilenerfassungs aber ich habe 2 Tasten in meiner benutzerdefinierten Listview-Reihe. Wie kann ich feststellen, auf welche Schaltfläche geklickt wurde? Danke – longhairedsi

+0

danke !!! Du hast mir wirklich geholfen !!! –

+1

@longhairedsi: fügen Sie bitte folgenden Code in die getView() Methode ein: button1.setFocusable (false); button2.setFocusable (false); button1.setFocusableInTouchMode (false); button2.setFocusableInTouchMode (false); button1.setOnClickListener (this); button2.setOnClickListener (this); Implementieren Sie Ihre Klick-Listener für Schaltfläche in Ihrem Adapter (oder wo Sie möchten ....) Set klicken Listener für Listenansicht auch ..... Jetzt überprüfen Sie Ihren Klick funktioniert für beide ..... Listview sowie Wie für Tasten auch –

0

Haben Sie einen ViewHolder in Ihrer erweiterten Adapterklasse gemacht? Wenn ja, dann erstellen Sie eine Instanz Ihres Platzhalters in setOnItemClickListener().

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) {   
     View rowView = v; 
     if (rowView == null) { 
      LayoutInflater inflater = this.getLayoutInflater(); 
       // GET INFLATE OF YOUR LAYOUT. 
      rowView = inflater.inflate(R.layout.projectpeopledescrate, null); 
      // CUSTOM ViewHolder Class Created in Adapter. 
// name,title,comment are my components on the same listview clicked item. 
      PPDViewHolder viewHolder = new PPDViewHolder(); 
      viewHolder.name  = (TextView) rowView.findViewById(R.id.ppeopledescrvname); 
      viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime); 
      viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment); 
      viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel); 
      rowView.setTag(viewHolder); 
     } 
      // ANOTHER object instance to apply new changes. 
     PPDViewHolder holder = (PPDViewHolder) rowView.getTag(); 
// I've setted up visibility over the components. You can set your onClickListener over your buttons. 
     holder.comment.setVisibility(View.GONE); 
     holder.name.setVisibility(View.GONE); 
     holder.title.setVisibility(View.GONE); 
     holder.hiddenLayout.setVisibility(View.VISIBLE); 
     holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT)); 
     holder.hiddenLayout.bringToFront(); 

    } 

Hoffe, Sie wollen etwas Selbes. Viel Glück!

11

alte Antwort: Ich schrieb in previous post here

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

wird nicht helfen, wenn Image in benutzerdefinierter Ansicht ist .. Ein button.setFocusable(false); während der Laufzeit (von Java-Quellcode)

verwenden müssen Bearbeiten: Es gibt noch elegantere Lösung. Versuchen Sie android:descendantFocusability="blocksDescendants" im Root-Layout des Listenelements hinzuzufügen. Das macht Klicks onListItem möglich und können separat u Griff-Taste oder Imagebutton klickt

0

ich diesen Code haben

this.mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       Log.v(TAG,"loul"); 
      } 
     }); 

Aber es hat nicht funktioniert

So habe ich juste eine onItemSelectedListener setzen unter und Arbeit Oo:

this.mListView.setItemsCanFocus(false); 
this.mListView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
     Log.v(TAG,"loul"); 
    } 
}); 
//listener for nothing but it allow OnItemClickListener to work 
this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 

    } 
}); 
0

setzen diese Eigenschaften:

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

für Ihre alle UI-Elemente in Ihrer list_item.xml Datei.

, wenn dies nicht in Ihrem Adapter-Set behoben:

v.imageView.setFocusable(false); 
    v.imageView.setFocusableInTouchMode(false); 
Verwandte Themen