Android ListView: получить индекс данных видимого элемента

У меня есть Android ListView, созданный с помощью SimpleAdapter, в котором есть больше элементов, чем на экране. После прокрутки списка мне нужно получить позицию в модели данных первого видимого элемента в списке.

В принципе, мне нужна функция типа: listView.getChildAt(0).getPositionInDataModel().

Adapter имеет несколько функций в нем, например getItemId(position), которые выглядели полезными; однако реализация SimpleAdapter просто возвращает переданную позицию, а не идентификатор строки, как я надеялся.

Решение грубой силы должно было бы получить представление в индексе 0 и сравнить его с представлением для каждого элемента в адаптере. Однако, кажется, нет простого способа получить представление для определенной позиции от адаптера.

У кого-нибудь есть мысли?

Ответ 1

Это очень легко. Просто используйте ListView.getFirstVisiblePosition() + indexYouWant. Например, чтобы получить позицию в адаптере второго ребенка, отображаемого в ListView, просто используйте getFirstVisiblePosition() + 1.

Нет необходимости в всех страшных вещах, указанных в ответе выше:)

Ответ 2

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

В этом случае мы получим элемент списка parent parent.getSelectedItemId();

Ответ 3

Просто используйте getPositionForView(View) (см. документацию). Основное преимущество этого метода заключается в том, что он также работает с потомком View элемента.