2016-04-29 10 views
0

Ich versuche (für etwa 4 Tage), Ansicht von bestimmten Listenansicht Element zu ändern. Ich habe viele Lösungen ausprobiert, die verfügbar waren und obwohl diese Frage "DUPLICATE" aussehen mag, aber ich habe mein Bestes versucht, um alle Lösungen zu implementieren, aber immer noch kein Glück.Wie ändere/aktualisiere ich ein einzelnes Listenelement in der Listenansicht?

Also hier ist meine Frage, ich habe eine Listenansicht, die mit einem benutzerdefinierten Adapter erstellt wird, der BaseAdapter erweitert.

Nun, was passieren muss, ist, dass nach Zuständen ein Bild in bestimmten Listenelement geändert werden soll. Hier

ist ein Code:

Listenansicht Initialisierung:

nowPlayingListView = (ListView) findViewById(R.id.nowPlayingListView); 
    nowPlayingListViewAdapter = new NowPlayingListViewAdapter(this, songsList); 
    nowPlayingListView.setAdapter(nowPlayingListViewAdapter); 

Hier wird die Manipulation nach Zustand:

public void handleSelectedState(Drawable dr) { 
    int currentPosition=getPosition(); 
    View singLeListItem = getViewByPosition(currentPosition, nowPlayingListView); 

    ImageButton imgButton = (ImageButton) findViewById(R.id.npListViewSingleImageButton); 

    int count = ((ViewGroup) singLeListItem).getChildCount(); 

    for (int i = 0; i < count; i++) { 
     View nextChild = ((ViewGroup) singLeListItem).getChildAt(i); 
     try { 
      //Log.d("Loop", count + "" + nextChild.getTag() + nextChild.getTag().equals("linearLayoutImageButton")); 
      if (nextChild.getTag().equals(getResources().getString(R.string.NPSingleItemLinearLayoutImgButton))) { 
       imgButton = (ImageButton) ((ViewGroup) nextChild).getChildAt(0); 
       imgButton.setImageDrawable(null); 
       imgButton.setImageDrawable(dr); 

       break; 
      } 
     } catch (Exception e) { 

     } 
    } 
} 

public View getViewByPosition(int pos, ListView listView) { 
    final int firstListItemPosition = listView.getFirstVisiblePosition(); 
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; 

    if (pos < firstListItemPosition || pos > lastListItemPosition) { 

     return listView.getAdapter().getView(pos, null, listView); 
    } else { 
     final int childIndex = pos - firstListItemPosition; 
     return listView.getChildAt(childIndex); 
    } 
} 

ich versucht habe zu tun adpater.notifydatasetchanged Verfahren nach Bild ziehbar gesetzt aber nichts passiert.

Auch der Code funktioniert nur für Listenelemente, die sichtbar sind, aber das ist nicht was ich brauche. Ich möchte die Änderungen an Listenelementen, die nicht sichtbar sind, aktualisieren.

Danke.

+0

es ist das Beste, Ihren Adapter zu ändern, um diese Zustände zu behandeln – Pooya

+0

Was genau meinen Sie damit? –

Antwort

0

Die Implementierung Ihres benutzerdefinierten Adapters sollte in etwa so aussehen, dass Sie die viewbezogenen Änderungen in der getView() -Methode vornehmen. Ihre Implementierung ist nicht der richtige Ansatz dafür.

+0

gibt es keinen Unterschied zwischen Ihrer Adapterimplementierung und mir, außer Sie verwenden Array-Adapter und ich verwende Basisadapter –

+0

Ich glaube nicht, dass Sie getView() -Methode explizit aufrufen sollten. Vielleicht möchten Sie diese Implementierung überprüfen http://www.piwai.info/android-adapter-good-practices/ – Anurag

+0

Ich habe es gelesen, aber es enthält viele Informationen, können Sie erklären, "mein Teil" in dort drüben. –

Verwandte Themen