1. 程式人生 > >Androin高階控制元件01 自動提示文字框與下拉列表

Androin高階控制元件01 自動提示文字框與下拉列表

1、高階控制元件展示

在這裡插入圖片描述
2、高階控制元件與低階控制元件區別
是否使用介面卡

  1. 介面卡種類和作用
    3.1 種類
    陣列介面卡 ArrayAdapter
    new ArrayAdapter(this,R.layout.actv_style, names);

3.2 簡單介面卡 SimpleAdapter
也叫“並不簡單的簡單介面卡”

3.3 作用
橋樑、 展示

  1. 高階控制元件使用步驟
    3.1 獲取資料
    3.2 建立介面卡
    3.3 繫結介面卡
    package com.example.myapplication07;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
private String[] data1;//獲取資料來源 先定義一個數組
private ArrayAdapter adapter1;//建立介面卡 先定義一個介面卡
private AutoCompleteTextView actv_main_content;//繫結介面卡 定義繫結展示的頁面資料

 private List<Option> data2=new ArrayList<>();
 private ArrayAdapter adapter2;
 private Spinner spacer_main_img;

 private List<Map<String,Object>> data3=new ArrayList<>();
 private SimpleAdapter adapter3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intiVew();//呼叫
    data1 = new String[]{"憤怒的小鳥", "湯姆貓", "落湯雞", "牛牛", "哈巴狗", "神龍", "烤鴨",
            "小象", "美人魚", "九尾狐"}; //初始化資料
    adapter1 = new ArrayAdapter(this,R.layout.actv_main_item1,data1);// 初始化介面卡
    actv_main_content.setAdapter(adapter1); //繫結介面卡

    loadData2();
    adapter2 = new ArrayAdapter(this,R.layout.actv_main_item1,data2);
    spacer_main_img.setAdapter(adapter2);

    loadData3();
    adapter3 = new SimpleAdapter(this,data3,R.layout.spinner_main_item1,new String[]{"img","desc"},new int[]{R.id.iv_main_item_img,R.id.tv_main_item1_desc});
    spacer_main_img.setAdapter(adapter3);
    spacer_main_img.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Map<String,Object> itemAtPosition = (Map<String, Object>) adapterView.getItemAtPosition(i);
            Toast.makeText(MainActivity.this,itemAtPosition.toString(),Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
}

private void loadData3() {
    List<Book> list = new BookDAO().list();
    Map<String,Object> map;
    for (Book book: list) {
       map = new HashMap<>();
       map.put("img",book.getImage());
       map.put("desc",book.getName());
       data3.add(map);
    }
}

private void loadData2() {
    //http從Java端獲取資料
    List<Map<String,String>> list = new ArrayList<>();
    Map<String,String> map;
    for (int i=0; i<6; i++){
        map =new HashMap();
        map.put("deptId",i+"");
        map.put("deptName","公關"+i+"部門");
        list.add(map);
    }
    for (Map<String,String> map1 : list){
        data2.add(new Option(map1.get("deptId"),map1.get("deptName")));
    }
}

//初始化控制元件
private void intiVew(){
    //初始化定義繫結展示的頁面資料
    actv_main_content=findViewById(R.id.actv_main_content);
    spacer_main_img=findViewById(R.id.spacer_main_img);
}


public void getContent(View view) {
    Option selectedItem = (Option) spacer_main_img.getSelectedItem();
    Toast.makeText(this, selectedItem.getValue(), Toast.LENGTH_SHORT).show();

}

}

  1. 自動提示文字框
    4.1 AutoCompleteTextView(單一提示)
    android:completionThreshold=“1”
<?xml version="1.0" encoding="utf-8"?>

<!--自動提示框(單一提示)-->
<AutoCompleteTextView
    android:layout_width="match_parent"
    android:id="@+id/actv_main_content"
    android:hint="請選擇"
    android:layout_height="wrap_content" />

<Spinner
    android:layout_width="match_parent"
    android:id="@+id/spacer_main_img"
    android:layout_height="wrap_content"></Spinner>


<Button
    android:layout_width="match_parent"
    android:text="獲取value值"
    android:onClick="getContent"
    android:layout_height="wrap_content" />

4.3 兩種自動提示文字框的異同
AutoCompleteTextView:支援基本的自動完成功能,適用在各種搜尋功能中,並且可以根據自己的需求設定他的預設顯示資料
MultiAutoCompleteTextView: 可支援選擇多個值(在多次輸入的情況下),分別用分隔符分開,並且在每個值選中的時候再次輸入值時會自動去匹配。
可用在發簡訊,發郵件時選擇聯絡人這種型別當中。

  1. 下拉框
    Spinner
    事件監聽
    AdapterView.OnItemSelectedListener

核心:
1、陣列介面卡
String[] AutoCompleteTextView 項資源
List Spinner 項資源
2、獲取下拉框的值
3、簡單介面卡
List 項資源