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
с предмета.