onListItemClick,我可以从'id'获得绝对位置吗?

时间:2012-02-17 01:33:59

标签: android listview

我有

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'中获得真实的位置吗?

4 个答案:

答案 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数组上使用相同的索引。