0

我有一个 ListView,它具有使用数组适配器的自动完成功能,效果很好。我的问题是,当我在列表视图过滤后单击列表项时,我得到第一项的位置索引 0,第二项的位置索引 1,以此类推过滤列表中的项目(在 onlistitemclick 侦听器中获得的位置) .

如何在过滤之前获取所选项目相对于列表的位置索引?

4

2 回答 2

2

如果您发布代码(至少是设置适配器的片段)会更好。我假设你已经使用了类似下面的东西。

String[] items={"Item 1", "Item 2", "Item 3"};
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items));
}

如果是这种情况,则可能无法设置标签和识别位置。如果您可以直接进行字符串验证而不是找到可以的位置。但是你说你有100多个项目。

因此,最好创建一个扩展 ArrayAdapter 或其他的自定义适配器。在该 CustomAdapter 中,在getView(int position, View convertView, ViewGroup parent)textView.setText(String[position]);方法中,您在每个视图(textView)的此设置标记之前和之后将每个项目设置为 TextViewtextView.setTag(position);

最后,您在活动类中设置自定义适配器listView.setAdapter(customAdapter);,这样您就必须getTag()找到即使在过滤项目后也不会改变的位置。让我们看看我是否可以在您发布代码后编辑我的答案,以防您不想接受我目前的建议。

于 2012-10-13T15:29:46.800 回答
0

当您膨胀视图时,为视图设置一个标签,该标签具有该项目在过滤之前在列表中的位置。

例子

view.setTag(originalPosition);    
view.setTag(resource_id, originalPosition);

通过相对位置访问视图时,使用 view.getTag() 检索绝对位置

于 2012-10-13T13:07:52.423 回答