2017-01-16 1 views
2

ausgelöst Dies ist die Situation: Ich habe eine Listview mit einigen Elementen. In jedem Element befinden sich zwei anklickbare Ansichten, die nur nach Benutzerklicks im übergeordneten Element angezeigt werden.Onclicklistener für eine Kind-Ansicht in einem ListView-Element nur zum zweiten Mal nach Onitemclicklistener

Es funktioniert wie folgt:

productList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(final AdapterView<?> parent, final View view, final int position, long id) { 

       TextView txtAdd = (TextView) view.findViewById(R.id.txt_add_units); 
       txtAdd.setVisibility(View.VISIBLE); 
       txtAdd.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         ... 
        } 
       }); 

       TextView txtRemove = (TextView) view.findViewById(R.id.txt_remove_units); 
       txtRemove.setVisibility(View.VISIBLE); 
       txtRemove.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         ... 
        } 
       }); 

       basketProductsListAdapter.notifyDataSetChanged(); 

      } 

     }); 

Das erste Mal, wenn ein Listview-Element geklickt wird, seine txtAdd und txtRemove Kind Ansichten gezeigt und dann, wenn der Benutzer sie anklickt, Code innerhalb ihrer OnClickListener ausgeführt wird.

Das Problem erscheint nur im ersten Listenansicht Element. Beim ersten Klicken wird txtAdd und txtRemove angezeigt, ABER IM ERSTEN MAL klickt der Benutzer auf die untergeordneten Ansichten, der ItemClickListener seiner Eltern wird erneut ausgelöst, und die untergeordneten Ansichten (txtAdd und txtRemove) empfangen den clickListener nicht. Folgende Zeiten funktionieren perfekt. Das Seltsame ist, dass es nur beim ersten Eintrag im listView passiert.

Irgendwelche Ideen? Danke im Voraus!

+0

erstellen Linearlayout Hinzufügen, setzen Sie Ihre 'txtAdd' und' txtRemove 'innerhalb dieses linearen Layouts, behalte Linearlayout als 'visiblity = gone'. Klicken Sie im Listenelement auf visibility dieses linearen Layouts auf "sichtbar" programmatisch. Dann Trigger Ereignisse für 'txtAdd' und' txtRemove' auslösen. – Vikrant

+0

Das ist ziemlich das gleiche, was ich tue, ist es nicht @Vikrant? Danke trotzdem – Hugo

+0

Müssen 'android: demcendantFocusability =" blocksDescendants "' zu Ihrem Listview XML hinzugefügt werden? – Vikrant

Antwort

0

diese Zeile in der Listenansicht xml hinzufügen android:descendantFocusability="blocksDescendants"

Das Ding ist unser Kind Ansicht fokussierbar sein kann, so dass der erste Klick für den Fokus sein wird und danach die itemClick funktioniert. diese Zeile in der XML-avoide fokussierbarem hinzufügen

Dennoch, wenn es dann nicht versuchen, funktioniert

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

dem Kind Blick auf die Listenansicht

+0

Faire Antwort, aber in diesem Zusammenhang ist es nicht anwendbar, scheint das Problem in der Tatsache liegt, dass das Frage-Poster aufClickListeners verschachtelt hat. – Wilhelm

Verwandte Themen