我有
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'中获得真实的位置吗?
答案 0 :(得分:2)
一种可能的解决方案:
设置列表视图后,执行整个列表的一次性操作,将所有可见项索引添加到数组中。例如,在5元素列表中,第2和第4项不可见,它看起来像这样:
索引[0] = 0
索引[1] = -1
索引[2] = 1
索引[3] = -1
索引[4] = 2
然后当你在onListItemClick中获得一个位置时,这只是“索引”数组中的一个索引,它返回过滤后的ListView中的实际位置。
然后在你的onListItemClick中,只需使用作为参数传递的位置作为键来查找已过滤列表中的位置。
编辑:SparseArray有点矫枉过正。提供相当简单的解决方案。
答案 1 :(得分:1)
我猜您可以使用.getChildCount()
和.getChildAt()
,然后检查每个.getVisibility() == View.VISIBLE
以计算可见数量,并检查所点击的项目是否等于当前所用的项目。我害怕没有直截了当的方式。
答案 2 :(得分:0)
位置是通用对象中元素的位置,即传递给数组适配器的列表。
答案 3 :(得分:0)
我从来没有对ItemIDs好运。
可能希望从View v
中提取数据。此视图可能包含TextView,您可以使用它来确定用户单击的行。如果可以通过相同的方式显示多行,则无效。
因此,如果是这种情况,您将不得不遍历调用适配器中每个元素的getItemID(int position)
数据集。将这些long存储在与数据集大小相同的数组中,并在column
数据集和此长ItemID数组上使用相同的索引。