Bài 17: AutocompleteTextView và MultiAutocompleteTextView

Leave a Comment
- Tôi ví dụ một trường hợp cụ thể như sau: Bạn viết ứng dụng yêu cầu nhập vào quê quán, giả sử đất nước Việt Nam mình có 63 tỉnh thành, trong đó có các tỉnh như: Hà Nội, Huế, Hà Giang, Hà Nam Ninh,… bất kỳ tỉnh nào đó có chữ H hoặc một nhóm tỉnh thành nào đó có cùng một số ký tự đầu. Như vậy ứng dụng phải Thông minh tự đưa ra lời đề nghị nhập tỉnh thành theo đúng ký tự mà họ muốn nhập, xem hình dưới:
17_auto_0
- Như hình trên: Bạn chỉ cần nhập ký tự h đầu tiên, nó sẽ lọc ra các tỉnh thành (hay thành phố) có ký tự đầu là h.
- Bạn nhớ đây không phải là Spinner vì bạn nhìn vào tưởng nó là Spinner. Mà nó làAutoCompleteTextView.
- Vậy 2 control này nó ở đâu? xem hình:
17_auto_1- Bạn xem cấu trúc XML của giao diện (activity_main.xml):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".AutoCompleteTextViewActivity" >
 <TextView
 android:id="@+id/selection"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#5576BE"
 android:text="TextView"
 android:textColor="#FFFFFF"
 android:textSize="20sp" />
<AutoCompleteTextView
 android:id="@+id/editauto"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:completionThreshold="1"
 android:ems="10" >
<requestFocus />
 </AutoCompleteTextView>
<MultiAutoCompleteTextView
 android:id="@+id/multiAutoCompleteTextView1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:completionThreshold="1"
 android:ems="10" />
</LinearLayout>
- Ở trên Tôi kéo 2 control ra luôn. Vì Tôi muốn demo code của 2 control này trong một chỗ để bạn dễ so sánh.
- Bạn nhìn vào dòng lệnh số 21 và 31:

android:completionThreshold= “1”

- Mục đích của nó là thiết lập số ký tự bắt đầu lọc trong AutoComplete. Ở đây Tôi 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.
- Xem class xử lý (MainActivity.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package tranduythanh.com;
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;
import android.widget.TextView;
public class MainActivity extends Activity
 implements TextWatcher /*TextWatcher để xử lý sự kiện TextChange */
 {
 TextView selection;
 //Khai báo 2 CompleteTextView
 AutoCompleteTextView singleComplete;
 MultiAutoCompleteTextView multiComplete;
 //Khởi tạo mảng tạm để Test
 String arr[]={"hà nội","Huế","Sài gòn",
 "hà giang","Hội an","Kiên giang",
 "Lâm đồng","Long khánh"};
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 selection =(TextView) findViewById(R.id.selection);
 //lấy đối tượng AutoCompleteTextView ra
 singleComplete=(AutoCompleteTextView) findViewById(R.id.editauto);
 //Thiết lập để lắng nghe TextChange
 singleComplete.addTextChangedListener(this);
 //Thiết lập ArrayADapter
 singleComplete.setAdapter(
 new ArrayAdapter<String>
 (
 this,
 android.R.layout.simple_list_item_1,
 arr
 ));
 //Lấy đối tượng MultiAutoCompleteTextView ra
 multiComplete=(MultiAutoCompleteTextView)
 findViewById(R.id.multiAutoCompleteTextView1);
 //Thiết lập ArrayADapter
 multiComplete.setAdapter(
 new ArrayAdapter<String>
 (
 this,
 android.R.layout.simple_list_item_1,
 arr
 ));
 //Đối với MultiAutoCompleteTextView bắt buộc phải gọi dòng lệnh này
 multiComplete.setTokenizer(new MultiAutoCompleteTextView
 .CommaTokenizer());
 }
 //Khi chọn trong AutoCompleteTextView hàm này sẽ tự động phát sinh
 public void onTextChanged(CharSequence arg0, int arg1,
 int arg2, int arg3) {
 selection.setText(singleComplete.getText());
 }
 public void afterTextChanged(Editable arg0) {
 }
 public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
 int arg3) {
 }
}
- Bạn tải code mẫu ở đây:http://www.mediafire.com/?dos0a2v0bh6hp2b
Chúc các bạn thành công.

0 nhận xét:

Đăng nhận xét