android – lijstweergave item bekijken op positie

Ik heb een lijstweergave met aangepaste adapter (basisadapter). Ik wil weergave van lijstweergave per positie krijgen. Ik heb mListView.getChildAt(position)geprobeerd, maar het werkt niet. Hoe kan ik item per positie bekijken?


Antwoord 1, autoriteit 100%

Gebruik dit:

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

Antwoord 2, autoriteit 5%

Je kunt alleen zichtbare weergave krijgen vanuit ListView omdat rijweergaven in ListView opnieuw kunnen worden gebruikt. Als u mListView.getChildAt(0)gebruikt, krijgt u de eerste zichtbare weergave. Deze weergave is gekoppeld aan item van adapter op positie mListView.getFirstVisiblePosition().


Antwoord 3, autoriteit 2%

Voorkeursmanier om het uiterlijk/wat dan ook van rijweergaven te veranderen zodra de ListView is getekend, is om iets te veranderen in de gegevens waaruit ListView put (de reeks objecten die in uw Adapter wordt doorgegeven) en zorg ervoor dat u daar rekening mee houdt in uw getView() functie en teken vervolgens de ListView opnieuw door

. aan te roepen

notifyDataSetChanged();

EDIT: hoewel er een manier is om dit te doen, is de kans groot dat je iets verkeerd doet als je dit moet doen. Hoewel er maar weinig randgevallen zijn waar ik aan kan denken, is het gebruik van notifyDataSetChanged()en andere ingebouwde mechanismen over het algemeen een goede keuze.

EDIT 2: Een van de veelgemaakte fouten die mensen maken, is proberen om hun eigen manier te bedenken om te reageren op het klikken/selecteren van een rij in de ListView, zoals in een van de opmerkingen bij dit bericht. Er is een bestaande manier om dit te doen. Dit is hoe:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    /* Parameters
    parent:     The AdapterView where the click happened.
    view:       The view within the AdapterView that was clicked (this will be a view provided by the adapter)
    position:   The position of the view in the adapter.
    id:         The row id of the item that was clicked. */
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //your code here
    }
});

ListViewheeft veel ingebouwde functionaliteit en er is voor eenvoudigere gevallen hoeft u het wiel niet opnieuw uit te vinden. Aangezien ListView AdapterViewuitbreidt, kunt u dezelfde luisteraars instellen, zoals OnItemClickListenerzoals in het bovenstaande voorbeeld.


Antwoord 4

workignHoursListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent,View view, int position, long id) {
        viewtype yourview=yourListViewId.getChildAt(position).findViewById(R.id.viewid);
    }
});

Other episodes