Ankit Kamboj
Ankit Kamboj

Reputation: 59

Getting item position in AutoCompleteTextView addTextChangeListener method

I have Autocomplete textviews in my custom adapter. when i write something in onTextChange listener, i want to get item position. I it gives all items positions. Please help me regarding this issue. Thanks!

Upvotes: 3

Views: 4814

Answers (5)

Chintan Bawa
Chintan Bawa

Reputation: 1386

This is how you can get position of Item you typed in AutoCompleteTextView. But you have to add the full name of item like "apple" or "apples" then this code will give you the position of that particular item. But its very expensive process if you have lots of items in your list.

public class Test extends AppCompatActivity {

private AutoCompleteTextView autoCompleteTextView;
private List<String> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chintan_test);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    list = new ArrayList<>();
    list.add("Apple");
    list.add("Apples");
    list.add("Banana");
    list.add("Aunt");
    list.add("Orange");

    autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
    autoCompleteTextView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list));

    autoCompleteTextView.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            for (String string : list)
                if (string.toLowerCase().equals(s.toString().toLowerCase())) {
                    int pos = list.indexOf(string);
                    Toast.makeText(Test.this, "" + pos, Toast.LENGTH_SHORT).show();
                }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }

    });
}

}

Let me know if this code helps you.

Upvotes: 1

Nauman Ali Shah
Nauman Ali Shah

Reputation: 163

you can use addTextChangedListener for this purpose

 yourAutoCompleteTextView.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {                

}

@Override
public void afterTextChanged(Editable s) {

} });

Upvotes: 0

Saveen
Saveen

Reputation: 4220

hi can you please check there is some issue

AutoCompleteTextView tv = (AutoCompleteTextView)     findViewById(R.id.autoCompleteTextView1);
final ArrayList<Student> list = new ArrayList<MainActivity.Student>();
list.add(new Student("abc"));
list.add(new Student("abc"));
ArrayAdapter<Student> adapter = new ArrayAdapter<MainActivity.Student>(
        this, android.R.layout.simple_dropdown_item_1line, list);
tv.setAdapter(adapter);

tv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        Student selected = (Student) arg0.getAdapter().getItem(arg2);
        Toast.makeText(MainActivity.this,
                "Clicked " + arg2 + " name: " + selected.name,
                Toast.LENGTH_SHORT).show();
    }
});

for more checking you can go from here...

Upvotes: 0

DIGITAL JEDI
DIGITAL JEDI

Reputation: 1666

Use textwatcher, implement it in activity class.

@Override
public void afterTextChanged(Editable arg0) {
 // TODO Auto-generated method stub

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
 // TODO Auto-generated method stub

}

Upvotes: 0

DIGITAL JEDI
DIGITAL JEDI

Reputation: 1666

autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
        String selection = (String)parent.getItemAtPosition(position);
        //TODO Do something with the selected text
    }
});

Upvotes: 2

Related Questions