How to remove the filter on an ArrayAdapter used in an AutoCompleteTextView?
<p>As the title, how can I remove the filtering on an ArrayAdapter used by an AutoCompleteTextView to get the original list back?</p>

<p>A little more background:</p>

<p>It all started from the sad fact that the "position" value passed in to onItemClick() is useless. The "position" refers to the position AFTER the array has been filtered, but I need to know its REAL position. So, what I'm trying to do is when I've got the text of the selected item (by using getItemAtPosition(position)), I compare it one-by-one with the original string array that backs the ArrayAdapter. However, I found that when onItemClick() is called, the adapter is already filtered, I no longer have access to the original array. So I thought if I can remove the filter, maybe I can get back the original array and look for the selected item in it. </p>

<pre><code>ArrayAdapter&lt;String&gt; mAdapter;

public void onCreate() {

    // Create an adapter and remembere it as a class member.
    mAdapter = new ArrayAdapter&lt;String&gt;(this, layoutId);

    // Add 100 strings to it and attach it to an AutoCompleteTextView
    for (int i = 0; i &lt; 100; i++)
        mAdapter.add("random text");
    ((AutoCompleteTextView)findViewById(id)).setAdapter(mAdapter);
}

@Override
public void onItemClick(AdapterView&lt;?&gt; actv, View view, int position, long id) {

    if (actv.getAdapter().equals(mAdapter))
        Log.d("The adapter contained in actv is the same one I created earlier.");

    // And, I can get the text of the item the user selected

    String selected = (String)actv.getItemAtPosition(position);

    // However, although the adapter passed in is still the same one, but the  
    // number of items in it is only 1! Because the array has been filtered.

    int numItems = actv.getAdapter.getCount();

    // So, I'm thinking if I can somehow remove the filtering here, then I can
    // get back those 100 items, and do a search like following:

    for (int i = 0; i &lt; actv.getAdapter.getCount(); i++)
       if (selected == actv.getAdapter.getItem(i))
            break;    // Eureka!!!
}
</code></pre>

<p>To tackle the problem of obtaining the REAL position of the selected item:</p>

<ol>
<li><p>Is there a way to utilize the "id" value? Like, assign each item an id, then hopefully onItemClick() would pass back the correct id.</p></li>
<li><p>Like I said above, remove the filter (is it possible), get back the original 100 items, and perform a one-by-one search.</p></li>
<li><p>This is the last resort, I know it'll work, but I don't want to do it: Once I get the text of the selected text, I go back to the source of the data (from a database), query those 100 items out, and perform the search.</p></li>
<li><p>Another lame last resort: To avoid the overhead on accessing the database again as in #3, when in onCreate(), while creating the ArrayAdapter, I use an ArrayList of my own to remember all those 100 strings.</p></li>
</ol>

<p>Am I doing it all wrong? What's the "right" way of obtaining the real position of the selected item from an AutoCompleteTextView?</p>

<p>Thank you very much!</p>

<p>(I read somewhere, some buy that seemed to be from Google Android team, said that one should use getFirstVisiblePosition() to resolve the position. But I can't figure out how.)</p>
