Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: get position of item in a listview given its id:

getItemIdAtPosition() is a function in android used to get the id of an item in a list view given its position

is there any way of doing the reverse, i.e. getting the position of an item is a list view given its id?

like image 239
user2595281 Avatar asked Aug 02 '13 11:08

user2595281


2 Answers

No. You have to do it manually. Create a public method inside the adapter you are using; in that method, loop on the adapter items and check each item id. If it is == to the method param, then return the index.

public int getItemPosition(long id)
{
    for (int position=0; position<mList.size(); position++)
        if (mList.get(position).getId() == id)
            return position;
    return 0;
}

Update: You might as well save a HashMap for position/id in your adapter, if lookup performance represents a problem for your use case.

Update: If you want to use this method outside the adapter, then use below:

private int getAdapterItemPosition(long id)
{
    for (int position=0; position<mListAdapter.getCount(); position++)
        if (mListAdapter.get(position).getId() == id)
            return position;
    return 0;
}
like image 125
Bogdan Zurac Avatar answered Oct 20 '22 00:10

Bogdan Zurac


Not sure if the question is still open. Nevertheless, thought I will share how I did it so that it may help someone who is looking to do the same thing.

You can use the tag feature of a view to store the mapping between that view's id and its position in the list.

The documentation for tags on the android developer site explains it well:

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)

Example: In the getView method of your list adapter, you can set the mapping for that view's id and its position in the list, something like:

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;
}

To retrieve the position of the view, you would do something like:

int getItemPosition(View view)
{
    return view.getTag(view.getId());
}

A point to be noted is that you do need to have a reference to the View whose position you want to retrieve. How you get hold of the View's reference is dependent on your specific case.

like image 42
sandyiscool Avatar answered Oct 20 '22 01:10

sandyiscool