Android ListView: получить индекс данных видимого элемента - PullRequest
34 голосов
/ 04 января 2010

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

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

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

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

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

Ответы [ 3 ]

90 голосов
/ 05 января 2010

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

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

1 голос
/ 17 июня 2010
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 ();

0 голосов
/ 14 ноября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...