AutoComplete TextView Android Studio

AutoComplete TextView Android Studio

In this article we will learn how to create AutoComplete TextView in android studio. Furthermore, autocomplete textview is used when we need to show a list of text like name, cities when the user type the first letters in the text. AutoComplete TextView is a UI widget. So that, when we need to create it we need to add it in the xml layout file as following:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <AutoCompleteTextView
 android:id="@+id/auto_name"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:completionThreshold="2"
 android:hint="@string/hint_enter_name" />
</LinearLayout>

The AutoComplete TextView uses a list in order that we need to create adapter for this list. The adapter requires another XML layout file that represents the Row layout of the list. This row layout contains a TextView widget that displays the text.

So that, make right click on the layout folder in android studio and select new resource layout file and name it layout_row.xml. The past the following code in it.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <TextView
 android:id="@+id/lbl_name"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:paddingBottom="16dp"
 android:paddingLeft="8dp"
 android:paddingRight="8dp"
 android:paddingTop="16dp"
 android:text="Medium Text"
 android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>

Next, in the Java folder create new file that represents a model class that holds the first name and last name for People class. Use the following code.

public class People {
 private String name, lastName;
 private int id;
 public People(String name, String lastName, int id) {
 this.name = name;
 this.lastName = lastName;
 this.id = id;
 }
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getlastName() {
return lastName;
 }
 public void setlastName(String lastName) {
 this.lastName = lastName;
 }
}

Well Done, after that we need to create and new Java class that extends the Adapter class. Name it PeopleAdapter.java.

public class PeopleAdapter extends ArrayAdapter<People> {
 Context context;
 int resource, textViewResourceId;
 List<People> items, tempItems, suggestions;
 public PeopleAdapter(Context context, int resource, int textViewResourceId, List<People> items)
{
 super(context, resource, textViewResourceId, items);
 this.context = context;
 this.resource = resource;
 this.textViewResourceId = textViewResourceId;
 this.items = items;
 tempItems = new ArrayList<People>(items); // this makes the difference.
 suggestions = new ArrayList<People>();
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 View view = convertView;
 if (convertView == null) {
 LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 view = inflater.inflate(R.layout.row, parent, false);
 }
 People people = items.get(position);
 if (people != null) {
 TextView lblName = (TextView) view.findViewById(R.id.lbl_name);
 if (lblName != null)
 lblName.setText(people.getName());
 }
 return view;
 }
 @Override
 public Filter getFilter() {
 return nameFilter;
 }
 /**
 * Custom Filter implementation for custom suggestions we provide.
 */
 Filter nameFilter = new Filter() {
 @Override
 public CharSequence convertResultToString(Object resultValue) {
 String str = ((People) resultValue).getName();
 return str;
 }
 @Override
 protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
 suggestions.clear();
 for (People people : tempItems) {
 if
(people.getName().toLowerCase().contains(constraint.toString().toLowerCase())) {
 suggestions.add(people);
 }
 }
 FilterResults filterResults = new FilterResults();
 filterResults.values = suggestions;
 filterResults.count = suggestions.size();
 return filterResults;
 } else {
 return new FilterResults();
 }
 }
 @Override
 protected void publishResults(CharSequence constraint, FilterResults results) {
 List<People> filterList = (ArrayList<People>) results.values;
 if (results != null && results.count > 0) {
 clear();
 for (People people : filterList) {
 add(people);
 notifyDataSetChanged();
 }
 }
 }
 };
}

Finally, in the main activity java file add the following code.

public class MainActivity extends AppCompatActivity {
 AutoCompleteTextView txtSearch;
 List<People> mList;
 PeopleAdapter adapter;
 private People selectedPerson;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 mList = retrievePeople();
 txtSearch = (AutoCompleteTextView) findViewById(R.id.auto_name);
 adapter = new PeopleAdapter(this, R.layout.activity_main, R.id.lbl_name, mList);
 txtSearch.setAdapter(adapter);
 txtSearch.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
 //this is the way to find selected object/item
 selectedPerson = (People) adapterView.getItemAtPosition(pos);
 }
 });
 }
 private List<People> retrievePeople() {
 List<People> list = new ArrayList<People>();
 list.add(new People("James", "Bond", 1));
 list.add(new People("Jason", "Bourne", 2));
 list.add(new People("Ethan", "Hunt", 3));
 list.add(new People("Sherlock", "Holmes", 4));
 list.add(new People("David", "Beckham", 5));
 list.add(new People("Bryan", "Adams", 6));
 list.add(new People("Arjen", "Robben", 7));
 list.add(new People("Van", "Persie", 8));
 list.add(new People("Zinedine", "Zidane", 9));
 list.add(new People("Luis", "Figo", 10));
 list.add(new People("John", "Watson", 11));
 return list;
 }
}

Now run the app and comment us about the result.

Than You.

Learn more about autocomplete textview

Read about TextView in android studio

Leave a Comment

Your email address will not be published. Required fields are marked *