Android ListView: Pobierz indeks danych widocznego elementu

Mam Androida ListView stworzonego z SimpleAdapter, który ma więcej elementów niż zmieści się na ekranie. Po przewinięciu listy muszę uzyskać pozycję w modelu danych pierwszego widocznego elementu na liście.

W zasadzie chcę taką funkcję jak: listView.getChildAt(0).getPositionInDataModel().

Adapter ma w sobie kilka funkcji, takich jak getItemId(position), które wyglądały na użyteczne; jednak implementacja SimpleAdapter po prostu zwraca przekazaną pozycję, a nie id wiersza, jak miałem nadzieję.

Rozwiązaniem brute force byłoby aby uzyskać widok o indeksie 0 i porównać go z widokiem dla każdego elementu w adapterze. Jednak nie wydaje się, aby był łatwy sposób na uzyskanie widoku dla konkretnej pozycji z adaptera.

Ktoś ma jakieś przemyślenia?
Author: Macarse, 2010-01-04

3 answers

To bardzo proste. Wystarczy użyć ListView.getFirstVisiblePosition() + indexYouWant. Na przykład, aby uzyskać pozycję w adapterze drugiego potomka wyświetlaną w ListView, Wystarczy użyć getFirstVisiblePosition() + 1.

No need for all the scary stuff showed in the reply above:)

 90
Author: Romain Guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-31 12:57:46
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    {
        AisleId= parent.getSelectedItemId();
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
});

W tym pliku otrzymamy parent ID elementu listy.getSelectedItemId ();

 1
Author: varma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-19 21:35:14

Po prostu użyj getPositionForView(View) (patrz dokumentacja ). Główną zaletą tej metody jest to, że działa ona również z potomkiem View s elementu.

 -1
Author: Cyril Mottier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-14 12:52:14