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

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

В основном я хочу функцию как: listView.getChildAt(0).getPositionInDataModel(),

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

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

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

3 ответа

Решение

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

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

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.getSelectedItemId();

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

Другие вопросы по тегам