getItemIdAtPosition()
是Android中的一个函数,用于根据位置获取列表视图中项目的ID。
是否有一种方法可以实现反向操作,即根据ID获取列表视图中项目的位置?
(注:原文已经很通俗易懂,翻译时只需转换语言即可)不行,您必须手动完成。在您使用的适配器中创建一个公共方法; 在该方法中,循环适配器项目并检查每个项目的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;
}
不确定问题是否仍然存在。但是,我想分享一下我是如何做到的,以便帮助那些正在寻找相同解决方案的人。
您可以使用视图的标记功能来存储该视图的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());
}
需要注意的一点是,您确实需要引用要检索位置的视图。如何获取视图的引用取决于您的具体情况。
已经太晚回答了,但是为了帮助...
例如,如果你有一个ListView,并且你想通过点击监听器获取ID,你可以通过& 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());