getItemIdAtPosition()
是android中的一个函数,用于获取列表视图中项目的id给定其位置
有没有办法反过来,即获取项目的位置是一个列表视图给定其ID?
答案 0 :(得分:13)
没有。你必须手动完成。在您正在使用的适配器中创建一个公共方法;在该方法中,循环适配器项并检查每个项ID。如果= =方法参数,则返回索引。
public int getItemPosition(long id)
{
for (int position=0; position<mList.size(); position++)
if (mList.get(position).getId() == id)
return position;
return 0;
}
更新:如果查找性能代表您的用例存在问题,您也可以在适配器中保存位置/ ID的HashMap。
更新:如果您想在适配器外使用此方法,请使用以下内容:
private int getAdapterItemPosition(long id)
{
for (int position=0; position<mListAdapter.getCount(); position++)
if (mListAdapter.get(position).getId() == id)
return position;
return 0;
}
答案 1 :(得分:4)
不确定问题是否仍然存在。尽管如此,我想我会分享我是如何做到的,以便它可以帮助那些想要做同样事情的人。
您可以使用视图的标记功能来存储该视图的ID与其在列表中的位置之间的映射。
Android开发者网站上的标签文档很好地解释了这一点:
http://developer.android.com/reference/android/view/View.html#Tags
http://developer.android.com/reference/android/view/View.html#setTag(int, java.lang.Object)
http://developer.android.com/reference/android/view/View.html#getTag(int)
实施例: 在列表适配器的getView方法中,您可以设置该视图的id的映射及其在列表中的位置,如:
public View getView (int position, View convertView, ViewGroup parent)
{
if(convertView == null)
{
// create your view by inflating a xml layout resource or instantiating a
// custom view class
}
else
{
// Do whatever you want with the convertView object like
// finding a child view that you want to set some property of,etc.
}
// Here you set the position of the view in the list as its tag
convertView.setTag(convertView.getId(),position);
return convertView;
}
要检索视图的位置,您可以执行以下操作:
int getItemPosition(View view)
{
return view.getTag(view.getId());
}
需要注意的一点是,您需要引用要查找其位置的视图。如何掌握View的参考信息取决于您的具体情况。
答案 2 :(得分:0)
没有。根据您用来支持ListView
的适配器,ID和位置可能相同(我没有查看所有BaseAdapter
子类,所以我不能肯定地说)。如果您look at the source code for ArrayAdapter,您将看到getItemId
实际返回适配器中对象的位置。如果position和id相同,则不需要使用一个来获取另一个。否则,您只需要在适配器中搜索您要查找的对象 - 使用位置或ID - 您就可以找到其他值。
如果您正在谈论的是使用某个唯一键(即您定义的键)获取对象,则可以完成。您需要做的是设置适配器以获取HashMap
而不是ArrayList
或常规List
对象。然后,您可以创建自己的方法,只需从HashMap
中提取该值即可按键查找。
答案 3 :(得分:0)
现在回答太晚了,但为了好处...... 例如,如果你有listview,并且想要通过点击监听器获得id,你可以通过&gt;&gt;
获得它cListview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// for id or any informations
itemID = String.valueOf(catList.get(position).getItemID());
// for name or any informations
itemName = String.valueOf(catList.get(position).getItemName());