Sử dụng AutocompleteTextView và MultiAutocompleteTextView trong Android

AutoCompleteTextView và MultiAutocompleteTextView trong Android đều hỗ trợ cho người dùng những gợi ý liên quan khi bạn nhập vào trường EditText. Những gợi ý đó sẽ được hiển thị trong một menu thả xuống từ đó người dùng có thể chọn một item để thay thế cho nội dung của mình vừa nhập vào. Nhưng bạn đã phân biệt được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView chưa? Hãy xem qua sự khác nhau dưới đây.

Khi sử dụng AutocompleteTextView  nó sẽ hiển thị danh sách các gợi ý liên quan và bạn chỉ chọn được 1 gợi ý duy nhất từ danh sách đó. Còn khi sử dụng MultiAutocompleteTextView nó cũng đưa ra các gợi ý liên quan  nhưng bạn có thể chọn được nhiều hơn từ danh sách hiển thị, các gợi ý này sẽ được phân cách bởi dấu phẩy. Bạn có thể xem qua ví dụ này để hiểu thêm.

Trong ví dụ trên mình sử dụng Autocomplete cho trường nhập vào Ngôn ngữ lập trình chính và sử dụng MultiAutocomplete cho trường nhập vào Ngôn ngữ lập trình bạn có thể biết, qua đó bạn có thể thấy rõ được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView.

Một số phương thức trong AutoCompleteTextView:

  • getAdapter() : Phương thức này trả về một Listadapter có thể lọc được được sử dụng cho Autocomplete.
  • getCompletionHint() : Phương thức này trả về văn bản gợi ý tùy ý được hiển thị ở dưới danh sách kết nối.
  • getDropDownAnchor() : Phương thức này trả về view id mà danh sách dropdown được neo tới.
  • getListSelection() : Phương thức này trả về ị trí của lựa chọn, nếu có một.
  • isPopupShowing() : This method indicates whether the popup menu is showing.
  • setText(CharSequence text, boolean filter) : Phương thức này thiết lập văn bản ngoại trừ việc  nó có thể vô hiệu hóa bộ lọc.
  • showDropDown() : Phương thức này hiển thị dropdown trên màn hình.

Xem code tham khảo:

Cấu trúc XML của giao diện  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Họ tên" />

    <EditText
        android:id="@+id/edHoTen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/editText"
        android:text="Ngôn ngữ lập trình chính" />

    <AutoCompleteTextView
        android:id="@+id/atPrimaryLanguage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Ngôn ngữ bạn có thể biết" />

    <MultiAutoCompleteTextView
        android:id="@+id/mtSecondLanguage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnSubmit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:text="Submit" />

</LinearLayout>

Class xử lý MainActivity.java

package dev4u.com.autocompletetextviewdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MultiAutoCompleteTextView;
import android.widget.Toast;


public class MainActivity extends Activity {

    private EditText edHoTen;
    private AutoCompleteTextView atPrimaryLanguage;
    private MultiAutoCompleteTextView mtSecondLanguage;
    private Button btnSubmit;

    private String[] primaryLanguage = {"Java", "CSharp", "JavaScript", "Swift", "C/C++"};
    private String[] secondLanguage = {"Java", "CSharp", "JavaScript", "Swift", "C/C++"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edHoTen = (EditText) findViewById(R.id.edHoTen);
        atPrimaryLanguage = (AutoCompleteTextView) findViewById(R.id.atPrimaryLanguage);
        mtSecondLanguage = (MultiAutoCompleteTextView) findViewById(R.id.mtSecondLanguage);
        btnSubmit = (Button) findViewById(R.id.btnSubmit);

        ArrayAdapter adapterPrimaryLanguage = new ArrayAdapter(this, android.R.layout.simple_list_item_1, primaryLanguage);
        atPrimaryLanguage.setAdapter(adapterPrimaryLanguage);

        // Sét đặt số ký tự nhỏ nhất, để cửa sổ gợi ý hiển thị
        atPrimaryLanguage.setThreshold(1);

        ArrayAdapter adapterSecondLanguage = new ArrayAdapter(this, android.R.layout.simple_list_item_1, secondLanguage);
        mtSecondLanguage.setAdapter(adapterSecondLanguage);

        // Sét đặt số ký tự nhỏ nhất, để cửa sổ gợi ý hiển thị
        mtSecondLanguage.setThreshold(1);

        // Các đoạn text ngăn cách nhau bởi dấu phẩy.
        mtSecondLanguage.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

        btnSubmit.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                submitForm();
            }
        });
    }

    private void submitForm() {
        String text = "Họ tên: " + this.edHoTen.getText().toString()
                + "\nNgôn LT ngữ chính: " + this.atPrimaryLanguage.getText().toString()
                + "\nNgôn LT ngữ phụ: " + this.mtSecondLanguage.getText().toString();

        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    }
}

Các bạn chú ý ở 2 dòng này :

atPrimaryLanguage.setThreshold(1); và mtSecondLanguage.setThreshold(1); 

Ý nghĩa của nó là thiết lập số ký tự bắt đầu lọc trong AutoComplete. Ở đây mình  nhập là số 1 tức là chỉ cần 1 ký tự là nó bắt đầu lọc, còn nếu như bạn sửa thành 3 thì bạn nhập tới 3 ký tự vào nó mới bắt đầu lọc.

Lời kết

Qua ví dụ nhỏ trên chắc bạn cũng đã hiểu sơ qua về cách sử dụng AutocompleteTextView trong  Android và MultiAutocompleteTextView trong Android như thế nào cũng như phân biệt được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView, nếu có bất kỳ góp ý hay chia sẻ gì, mong bạn có thể để lại comment bên dưới hoặc gửi mail về [email protected]. Xin cảm ơn!!

Gom Marker trong Android với Google Maps Android API – Google Maps Android Marker Clustering Utility Sử dụng SwipeRefreshLayout trong ứng dụng Android Hướng dẫn tạo Material Dialog Bottom Sheet Android Tạo context menu trong Android – ActionBar ActionMode.CallBack Example Retrofit và Volley thư viện nào tốt hơn Hướng dẫn sử dụng thư viện Volley trong Android Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2 Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 1 Hàm chuyển đổi Timestamp thành Datetime trong Android và JavaScript Design Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 2)

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.