您好,登錄后才能下訂單哦!
最近寫一個使用Spinner實現城市級聯下拉框的Dome,現在總結一下,第一次寫博客,互相學習。
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
適配器的作用是用來處理數據并將數據綁定到AdapterView上,是AdapterView視圖與與數據之間的一個橋梁。
/** * @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 數組 * @param layoutId 布局Id */ public SpinnerAdapter(Context context, String[] array, int layoutId) { this.context = context; this.array = array; this.layoutId = layoutId; } /** * 獲取Item總數 * @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; } /** * 繪制的內容均在此實現 * @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實現城市級聯下拉框 * Spinner最簡單使用方式步驟如下: * 第一步:在布局文件中添加Spinner控件。 * 第二步:在Acitvity中通過id找到它。 * 第三步:給Spinner綁定一個適配器。 * 第四步:綁定監聽器就可以用了。 */ 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的監聽事件 spinner1.setOnItemSelectedListener(new Spinner1ClickListener()); //加載城市列表 loadCity(); //設置spinner2的監聽事件 spinner2.setOnItemSelectedListener(new Spinner2ClickListener()); //加載區域列表 loadGZArea(); //設置spinner3的監聽事件 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); } /** * 加載廣州區域列表 */ public void loadGZArea() { String[] array3 = new String[]{"請選擇", "天河區", "越秀區", "荔灣區", "海珠區", "蘿崗區", "白云區", "黃埔區", "花都區"}; SpinnerAdapter modelThree = new SpinnerAdapter(this, array3, R.layout.activity_item); spinner3.setAdapter(modelThree); } /** * 加載深圳區域列表 */ public void loadSZArea() { String[] array3 = new String[]{"請選擇", "龍崗區", "南山區", "福田區", "羅湖區", "鹽田區", "寶安區"}; 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下拉框,繼續隱藏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("深圳市")) { //重新加載深圳區域列表 loadSZArea(); } else if (str.equals("廣州市")) { //重新加載廣州區域列表 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) { } } }
下面是布局的效果圖
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。