高階控制元件 自動提示文字框與下拉列表
一、 高階控制元件使用步驟
1 、獲取資料
2 、建立介面卡
3 、繫結介面卡
二、自動提示文字框
1 、AutoCompleteTextView(單一提示)
android:completionThreshold=”1”
2 、MultiAutoCompleteTextView(多次提示)
//設定多次提示時,設定分隔符方法
Tokenizer t = new MultiAutoCompleteTextView.CommaTokenizer();
mactv_main.setTokenizer(t);
3、 兩種自動提示文字框的異同
AutoCompleteTextView:支援基本的自動完成功能,適用在各種搜尋功能中,並且可以根據自己的需求設定他的預設顯示資料
MultiAutoCompleteTextView: 可支援選擇多個值(在多次輸入的情況下),分別用分隔符分開,並且在每個值選中的時候再次輸入值時會自動去匹配。
可用在發簡訊,發郵件時選擇聯絡人這種型別當中。
public class MainActivity extends AppCompatActivity {
// 自動補全
private String[] data1;
private ArrayAdapter<String> adapter1;
private AutoCompleteTextView act_main_act1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
act_main_act1=this .findViewById(R.id.act_main_act1);
// 3.1 獲取資料
data1=new String[] { "憤怒的小鳥", "湯姆貓", "落湯雞", "牛牛", "哈巴狗", "神龍", "烤鴨",
"小象", "美人魚", "九尾狐" };
// 3.2 建立介面卡
adapter1=new ArrayAdapter<String>(this,R.layout.act_main_item1,data1);
// 3.3 繫結介面卡
act_main_act1.setAdapter(adapter1);
}
}
三、兩種自動提示文字框的異同
AutoCompleteTextView:支援基本的自動完成功能,適用在各種搜尋功能中,並且可以根據自己的需求設定他的預設顯示資料
MultiAutoCompleteTextView: 可支援選擇多個值(在多次輸入的情況下),分別用分隔符分開,並且在每個值選中的時候再次輸入值時會自動去匹配。
可用在發簡訊,發郵件時選擇聯絡人這種型別當中。
四、下拉框 Spinner
素材
String[] names = { “憤怒的小鳥”, “湯姆貓”, “落湯雞”, “牛牛”, “哈巴狗”, “神龍”, “烤鴨”,
“小象”, “美人魚”, “九尾狐” };
int[] images = { R.drawable.bird, R.drawable.cat, R.drawable.chicken,
R.drawable.cow, R.drawable.dog, R.drawable.dragon,
R.drawable.duck, R.drawable.elephant, R.drawable.fish,
R.drawable.fox };
事件監聽
AdapterView.OnItemSelectedListener
public class MainActivity extends AppCompatActivity {
// 下拉框
private List<Option> data2;
private ArrayAdapter<Option> adapter2;
private Spinner sp_main_sp1;
// 下拉圖片
private List<Map<String,Object>> data3;
private SimpleAdapter adapter3;
private Spinner sp_main_sp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp_main_sp1=this.findViewById(R.id. sp_main_sp1);
sp_main_sp2=this.findViewById(R.id. sp_main_sp2);
// 下拉框
data2=loadData2();
adapter2=new ArrayAdapter<Option>(this,R.layout.act_main_item1,data2);
sp_main_sp1.setAdapter(adapter2);
sp_main_sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
Option selectedItem= (Option) adapterView.getSelectedItem();
Toast.makeText(MainActivity.this,selectedItem.getHtml(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
// 下拉圖片
data3=loadData3();
adapter3=new SimpleAdapter(this,data3,R.layout.sp_main_item2,new String[]{"name","image"},new int[]{R.id.tv_main_item_tv1,R.id.iv_main_item_iv1});
sp_main_sp2.setAdapter(adapter3);
}
private List<Map<String,Object>> loadData3() {
List<Book> list=new BookDAO().list();
List<Map<String,Object>> mapList=new ArrayList<>();
Map<String,Object> map=null;
for (Book book : list) {
map=new HashMap<>();
map.put("name",book.getName());
map.put("image",book.getImage());
mapList.add(map);
}
return mapList;
}
private List<Option> loadData2() {
List<Book> list= new BookDAO().list();
List<Option> optionList=new ArrayList<>();
for (Book book:list){
optionList.add(new Option(book.getId()+"",book.getName()));
}
return optionList;
}
}