使用Spinner實現(xiàn)城市級聯(lián)下拉框

最近寫一個使用Spinner實現(xiàn)城市級聯(lián)下拉框的Dome,現(xiàn)在總結一下,互相學習.
activity_main.xml里面有三個Spinner

<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:background="@color/white"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="invisible" />

    <Spinner
        android:id="@+id/spinner3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="invisible" />

</LinearLayout>

Spinner的每一個item布局,里面只有一個TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="5dp">

    <TextView
        android:id="@+id/txt_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="名稱"
        android:textSize="16dp" />
</LinearLayout>

下面是SpinnerAdapter,一般會用到Adapter的有如下幾個控件
(1)列表視圖控件-ListView
(2)縮略圖瀏覽器控件-Gallery
(3)網格控件-GridView
(4)下拉列表控件-Spinner
(5)自動提示文本框-AutoCompleteTextView
(6)支持展開/收縮功能的列表控件-ExpandableListView
適配器的作用是用來處理數(shù)據(jù)并將數(shù)據(jù)綁定到AdapterView上,是AdapterView視圖與與數(shù)據(jù)之間的一個橋梁。

/**
 * @author: xiaolijuan
 * @description: Spinner適配器
 * @projectName: SpinnerProject
 * @date: 2015-10-18
 * @time: 00:19
 */
public class SpinnerAdapter extends BaseAdapter {
    private Context context;
    private String[] array;
    private int layoutId;

    /**
     * 構造方法
     * @param context 上下文對象
     * @param array  數(shù)組
     * @param layoutId 布局Id
     */
    public SpinnerAdapter(Context context, String[] array, int layoutId) {
        this.context = context;
        this.array = array;
        this.layoutId = layoutId;
    }

    /**
     * 獲取Item總數(shù)
     * @return
     */
    @Override
    public int getCount() {
        return array.length;
    }

    /**
     * 獲取一個Item對象
     * @param position
     * @return
     */
    @Override
    public Object getItem(int position) {
        return array[position];
    }

    /**
     * 獲取指定item的ID
     * @param position
     * @return
     */
    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 繪制的內容均在此實現(xiàn)
     * @param position position就是位置從0開始
     * @param convertView convertView是Spinner中每一項要顯示的view
     * @param parent parent就是父窗體了,也就是Spinner
     * @return
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View item = convertView != null ? convertView : View.inflate(context, layoutId, null);
        TextView txt_name = (TextView) item.findViewById(R.id.txt_name);
        txt_name.setText(array[position]);
        return item;
    }
}

java 代碼:注釋寫的很清楚

/**
 * 使用Spinner實現(xiàn)城市級聯(lián)下拉框
 * Spinner最簡單使用方式步驟如下:
 * 第一步:在布局文件中添加Spinner控件。
 * 第二步:在Acitvity中通過id找到它。
 * 第三步:給Spinner綁定一個適配器。
 * 第四步:綁定監(jiān)聽器就可以用了。
 */
public class MainActivity extends Activity {
    private Spinner spinner1, spinner2, spinner3;

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

        spinner1 = (Spinner) findViewById(R.id.spinner1);
        spinner2 = (Spinner) findViewById(R.id.spinner2);
        spinner3 = (Spinner) findViewById(R.id.spinner3);

        //加載省份列表
        loadProvince();
        //設置spinner1的監(jiān)聽事件
        spinner1.setOnItemSelectedListener(new Spinner1ClickListener());
        //加載城市列表
        loadCity();
        //設置spinner2的監(jiān)聽事件
        spinner2.setOnItemSelectedListener(new Spinner2ClickListener());
        //加載區(qū)域列表
        loadGZArea();
        //設置spinner3的監(jiān)聽事件
        spinner3.setOnItemSelectedListener(new Spinner3ClickListener());
    }

    /**
     * 加載省份列表
     */
    public void loadProvince() {
        String[] array1 = new String[]{"請選擇", "廣東省"};
        SpinnerAdapter adapterOne = new SpinnerAdapter(this, array1, R.layout.activity_item);
        spinner1.setAdapter(adapterOne);
    }

    /**
     * 加載城市列表
     */
    public void loadCity() {
        String[] array2 = new String[]{"請選擇", "廣州市", "深圳市"};
        SpinnerAdapter modelTwo = new SpinnerAdapter(this, array2, R.layout.activity_item);
        spinner2.setAdapter(modelTwo);
    }

    /**
     * 加載廣州區(qū)域列表
     */
    public void loadGZArea() {
        String[] array3 = new String[]{"請選擇", "天河區(qū)", "越秀區(qū)", "荔灣區(qū)", "海珠區(qū)", "蘿崗區(qū)", "白云區(qū)", "黃埔區(qū)", "花都區(qū)"};
        SpinnerAdapter modelThree = new SpinnerAdapter(this, array3, R.layout.activity_item);
        spinner3.setAdapter(modelThree);
    }

    /**
     * 加載深圳區(qū)域列表
     */
    public void loadSZArea() {
        String[] array3 = new String[]{"請選擇", "龍崗區(qū)", "南山區(qū)", "福田區(qū)", "羅湖區(qū)", "鹽田區(qū)", "寶安區(qū)"};
        SpinnerAdapter modelThree = new SpinnerAdapter(this, array3, R.layout.activity_item);
        spinner3.setAdapter(modelThree);
    }

    /**
     * Spinner1點擊事件
     */
    public class Spinner1ClickListener implements AdapterView.OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String str = (String) adapterView.getItemAtPosition(i);
            //判斷是否選擇城市,如果沒有選擇那么就隱藏Spinner2,Spinner3兩個下拉框,否則顯示Spinner2下拉框,繼續(xù)隱藏Spinner3
            if (str.equals("請選擇")) {
                spinner2.setVisibility(View.INVISIBLE);
                spinner3.setVisibility(View.INVISIBLE);
            } else {
                spinner2.setVisibility(View.VISIBLE);

                //將第二個下拉框的選項重新設置為選中“請選擇”這個選項。
                spinner2.setSelection(0);
            }

            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
        }

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

        }
    }

    /**
     * Spinner2點擊事件
     */
    public class Spinner2ClickListener implements AdapterView.OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String str = (String) adapterView.getItemAtPosition(i);
            if (str.equals("請選擇")) {
                spinner3.setVisibility(View.INVISIBLE);
            } else {
                //顯示第三個Spinner3
                spinner3.setVisibility(View.VISIBLE);

                if (str.equals("深圳市")) {
                    //重新加載深圳區(qū)域列表
                    loadSZArea();
                } else if (str.equals("廣州市")) {
                    //重新加載廣州區(qū)域列表
                    loadGZArea();
                }
            }
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
        }

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

        }
    }

    /**
     * Spinner3點擊事件
     */
    public class Spinner3ClickListener implements AdapterView.OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String str = (String) adapterView.getItemAtPosition(i);
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
        }

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

        }
    }
}

下面是布局的效果圖


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 內容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 47,135評論 22 665
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 最近做了一個Android UI相關開源項目庫匯總,里面集合了OpenDigg 上的優(yōu)質的Android開源項目庫...
    OpenDigg閱讀 17,589評論 6 222
  • (一)Android面試題(一)Activity、Intent Android四大組件分別是哪些?各自有什么作用和...
    Itachi001閱讀 4,536評論 4 95
  • 和舍友逛了一天街,晚上她說她想包夜唱歌。走了一天很累了好么,而且半夜唱歌這種瘋狂的事太耗體力了。我說不想去了呢,她...
    玖瑤閱讀 491評論 5 5

友情鏈接更多精彩內容