Alois Heimer
Alois Heimer

Reputation: 1832

Determine AutoCompleteTextView from onItemClick

Is it possible to determine the originating AutoCompleteTextView from the parameters of the callback onItemClick?

I have the following callback function, which is correctly triggered if I click on an item of the selection-popup-window of the AutoCompleteTextView:

public void onItemClick(AdapterView<?> adaptView, View view, int position, 
        long id) {
}

I know, that I can implement an own per-textview listener class, but I would like to determine which AutoCompleteTextView initiated the click solely from the parameters of the callback function - is this possible?

Upvotes: 4

Views: 1302

Answers (4)

Literate Corvette
Literate Corvette

Reputation: 387

I use a simpler version of yonoyjoy's answer. It only passes the AutoCompleteTextView to the constructor.

public class AutoCompleteTextViewClickListener implements AdapterView.OnItemClickListener {
    private AutoCompleteTextView mView;

    public AutoCompleteTextView getView() {
        return mView;
    }

    public AutoCompleteTextViewClickListener(AutoCompleteTextView view) {
        this.mView = view;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    }
}

Then in your Activity, you just override onItemClick() like you would in a normal OnClickListener, but use this.getView() to get your ACTV:

autoCompleteTextView.setOnItemClickListener(new AutoCompleteTextViewClickListener(v){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        super.onItemClick(parent, view, position, id);
        AutoCompleteTextView v = this.getView();

        //Do stuff.

    }
});

Upvotes: 0

Jose_GD
Jose_GD

Reputation: 2309

Based on @talklesscodemore answer, I solved it this way (I had 2 AutoCompleteTextView's, you have to adapt the following if there are more):

AutoCompleteTextView firstDropdown;
AutoCompleteTextView secondDropdown;

...

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
    if (isAdapterViewFromFirstDropdown(adapterView)) {
       // Code specific for 1st ACTV
    } else {
       // Code specific for 2nd ACTV
    }
}

private boolean isAdapterViewFromFirstDropdown(AdapterView<?> adapterView) {
    return adapterView.getAdapter().equals(firstDropdown.getAdapter());
}

Upvotes: 0

talklesscodemore
talklesscodemore

Reputation: 332

If you want to know which currentClickedAutoCompleteTextView between autoCompleteTextView1 and autoCompleteTextView2, just check their adapter ...

public void onItemClick(AdapterView<?> adaptView, View view, int position, long id) {
    AutoCompleteTextView currentClickedAutoCompleteTextView;
    if( adaptView.getAdapter()==autoCompleteTextView1.getAdapter() )
        currentClickedAutoCompleteTextView = autoCompleteTextView1;
    else
        currentClickedAutoCompleteTextView = autoCompleteTextView2;
}

Upvotes: 4

yonojoy
yonojoy

Reputation: 5566

I do not have a positive answer to the question (I think it is not possible). But I use a workaround to reach the same goal (find AutoCompleteTextView from within onItemClick):

I defined the following class, which can be used to modify the onItemClick call to provide the AutoCompleteTextView as second parameter (instead of original View param).

public class AutoCompleteTextViewClickListener implements OnItemClickListener {
       AutoCompleteTextView mAutoComplete;
       OnItemClickListener mOriginalListener;

       public AutoCompleteTextViewClickListener(AutoCompleteTextView acTextView, 
               OnItemClickListener originalListener) {
           mAutoComplete = acTextView;
           mOriginalListener = originalListener;
       }

       public void onItemClick(AdapterView<?> adView, View view, int position,
               long id) {
           mOriginalListener.onItemClick(adView, mAutoComplete, position, id);
       }       
}

This can be used in the following way:

Instead of

myTextView.setOnItemClickListener(myListener);

you'll have to write:

myTextView.setOnItemClickListener(
        new AutoCompleteTextViewClickListener(myTextView, myListener));

Now, whenever onItemClicked is triggered by the TextView, instead of the original view value the reference to the AutoCompleteTextView is available.

Upvotes: 5

Related Questions