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
элемента.