Vini.g.fer
Vini.g.fer

Reputation: 11909

Android: how to get AutoCompleteTextView inside onItemClick

I'm trying to get an AutoCompleteTextView's ID after I clicked a value on the list. Tried looking up on google and stackoverflow, but the provided answers didn't work. Here's what I've got:

Created the view in my class declaration:

public class ActivityCadastrarCliente extends Activity implements OnClickListener, OnItemClickListener {
    AutoCompleteTextView E_Nome_Cliente, E_CPF;
    List<String> Nomes = new ArrayList<String>();
    ...

Associated the view to an XML element:

E_Nome_Cliente = (AutoCompleteTextView)findViewById(R.id.Nome_Cliente);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, Nomes.toArray(new String[0]));
E_Nome_Cliente.setAdapter(adapter);
E_Nome_Cliente.setOnItemClickListener(this);

and my onItemClick method is called normally as below:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //switch (parent.getId()) { 
        //case R.id.Nome_Cliente:
            ...

    //}
}

Does anybody know how I can access this view inside onItemClick? Tried several ways, but I only get exceptions:

//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)view.getParent();
//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)parent;
//Class cast exception
AutoCompleteTextView input = (AutoCompleteTextView)parent.getParent();

I need to identify which view was clicked, because I'm using 3 to 5 AutoCompleteTextView and based on the selected value I'll automatically fill in a bunch of other fields.

Upvotes: 3

Views: 2610

Answers (4)

Himanshu Likhyani
Himanshu Likhyani

Reputation: 4570

An easier way:

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

    Adapter adapter = parent.getAdapter();

    if (adapter == autoCompleteTextView1.getAdapter()) {

        // Do something

    } else if (adapter == autoCompleteTextView2.getAdapter()) {

        // Do something else

    }
}

Upvotes: 1

yonojoy
yonojoy

Reputation: 5566

Have a look at the class AutoCompleteTextViewClickListener in this answer.

Change your setOnItemClickListener call in the following way:

E_Nome_Cliente.setOnItemClickListener(
        new AutoCompleteTextViewClickListener(E_Nome_Cliente, this));

Now you can get the id by accessing the modified view parameter:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //view had been modified by AutoCompleteTextViewClickListener 
    //to contain the original AutoCompleteTextView
    switch (view.getId()) { 
        case R.id.Nome_Cliente:
            //...
    }
}

Upvotes: 3

ashkhn
ashkhn

Reputation: 1620

Use parent.findViewById(R.id.id_of_autocompleteTextView) on the parent of the AutoCompleteTextView.

Upvotes: 0

Yazan
Yazan

Reputation: 6082

i am not sure what do you mean by view id? do you want to get the selected value? if yes, then the below code will do it, otherwise please clarify more what do you need and why you want to access the view itself.

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //switch (parent.getId()) { 
       String selected = adapter.getItem(position);

    //}
}

more on adapter methods are here

Upvotes: 0

Related Questions