2012-02-17 2 views
0

У меня естьonListItemНажмите, могу ли я получить абсолютную позицию от «id»?

setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, column)); 
getListView().setTextFilterEnabled(true); 

и

public void onListItemClick(
     ListView parent, View v, int position, long id) 

мне нужно оштрафовать позиции в колонке щелкнутого пункта. Позиция не работает, так как фильтр включен. Можно ли каким-то образом получить реальную позицию из «id»?

ответ

2

Одно из возможных решений:

После того как вы создали ListView, сделать прямоточный весь список, добавляя все видимые элементы индексов в массив. Например, в списке на 5 элементов, с 2-го и 4-го пунктов не видно, она будет выглядеть следующим образом:

индексы [0] = 0
индексы [1] = -1
индексы [2] = 1
индексов [3] = -1
индексы [4] = 2

тогда, когда вы получаете позицию в onListItemClick, это просто индекс в массиве «индексов», который возвращает реальное положение в фильтрованный ListView.

Затем внутри вашего onListItemClick просто используйте позицию, переданную как параметр, в качестве ключа для поиска позиции в отфильтрованном списке.

EDIT: SparseArray является излишним. Предлагая разумно простое решение.

+0

Привет, Алекс Я надеялся, что это более простое решение, но я буду помнить об этом. – cliff2310

1

Я думаю, вы можете использовать .getChildCount() и .getChildAt(), а затем отметьте .getVisibility() == View.VISIBLE на каждом, чтобы подсчитать количество видимых и проверить, соответствует ли элемент с кликом текущим итерационным. Боюсь, что нет простого способа.

+0

Привет, Том спасибо за вход. – cliff2310

0

Позиция в списке - это позиция элемента в общем объекте, т. Е. Список, который вы передаете адаптеру массива.

+0

Hi Rakshi Не с фильтром в игре. Это будет относительная позиция в отфильтрованном списке. Cliff – cliff2310

0

У меня никогда не было удачи с ItemID.

Возможно, вместо этого вытащите данные из View v. Это представление может содержать TextView, который можно использовать для определения того, к какой строке щелкнул пользователь. Это не будет работать, если несколько строк могут отображаться одинаково, хотя ...

Так что, если это так, вам придется перебирать набор данных, вызывающий getItemID(int position) на каждый элемент адаптера. Храните эти длинны в массиве того же размера, что и набор данных, и используйте тот же индекс как для вашего набора данных column, так и для этого длинного массива ItemID.

+0

Hi Edthethird Хорошо это имеет некоторые достоинства. Я искал массив и сравнивал строки, но есть дубликаты. Я мог бы использовать это для сортировки дубликатов. Благодарю. – cliff2310

Смежные вопросы