Android Spinner 下拉框簡單應用 詳細注解


@

Android Spinner

Spinner 提供下拉列表式的輸入方式,該方法可以有效節省手機屏幕上的顯示空間。

本次我將使用最簡單的Spinner來完成一個下拉框。完成的功能如下面的動圖
在這里插入圖片描述

代碼部分

Spinner代碼介紹

		list_Q.add("區縣");//下拉框列表,用於存儲下拉的內容
        adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
        //創建adpter適配器(必須)。
        //R.layout.support_simple_spinner_dropdown_item,spinner框樣式,這里我使用的都是默認的。
        spinner_Q.setAdapter(adapter_Q);//spinner綁定adpter,到這里你的下拉框已經可以顯示了。
        //spinner_Q.setEnabled(false);//設置spinner不可操作
        //設置spinner的選擇監聽事件
        spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            }

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

            }
        });

adapter_Q = new ArrayAdapter (getActivity(), R.layout.support_simple_spinner_dropdown_item,list_Q);
這里是自定義選擇填充后的字體樣式

adapter_Q .setDropDownViewResource(R.layout.item_drop); 自定義下拉的字體樣式
這樣式你都可以自己寫一個XMAL文件,我的使用的都是默認的就不在這里解釋了android:dropDownSelector:列表框被選中時的背景

下面引用一個博主的內容

android:dropDownWidth:設置下拉列表框的寬度
android:gravity:設置里面組件的對其方式
android:popupBackground:設置列表框的背景
android:prompt:設置對話框模式的列表框的提示信息(標題),只能夠引用string.xml中的資源id,而不能直接寫字符串
android:spinnerMode:列表框的模式,有兩個可選值:dialog:對話框風格的窗口
dropdown:下拉菜單風格的窗口(默認) android:overlapAnchor =
false:設置下拉框不覆蓋顯示框。(重要!!!) 可選屬性:android:entries:使用數組資源設置下拉列表框的列表項目

———————————————— 版權聲明:本文為CSDN博主「北極熊的微笑」的原創文章,遵循 CC 4.0 BY-SA
版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lpCrazyBoy/article/details/80748334

核心代碼

    private List<String> list_P= new ArrayList<>();//省下拉框列表
    private List<String> list_C= new ArrayList<>();//市下拉框列表
    private List<String> list_Q= new ArrayList<>();//區縣下拉框列表
    private List<String> list_TP= new ArrayList<>();//類型下拉框列表


    private ArrayAdapter<String> adapter_P;//省列表的適配器
    private ArrayAdapter<String> adapter_C;//市列表的適配器
    private ArrayAdapter<String> adapter_Q;//區縣列表的適配器
    private ArrayAdapter<String> adapter_TP;//類型列表的適配器

    private Button btn_eq_ok ;//查詢按鈕
    private Spinner spinner_P;//省下拉框
    private Spinner spinner_C;//市下拉框
    private Spinner spinner_Q;//區縣下拉框
    private Spinner spinner_TP;//類型下拉框

    public static equipmentFragment newInstance() {
        return new equipmentFragment();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.equipment_fragment, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mViewModel = ViewModelProviders.of(this).get(EquipmentViewModel.class);
        // TODO: Use the ViewModel

        init_Palette();//初始化控件
        init_hashmap();//初始化hashmap。

        //初始化省下拉框
        list_P.add("省");
        adapter_P = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_P);
        spinner_P.setAdapter(adapter_P);
        spinner_P.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                if (adapter_P.getItem(i).equals("省")){
                    list_C.clear();
                    list_C.add("市");
                    adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
                    spinner_C.setAdapter(adapter_C);
                }else{
                    list_C.clear();
                    list_C.add("市");
                    mapTool_getList(c_Hashmap,list_C,mapTool_getKey(p_Hashmap,adapter_P.getItem(i)),2);
                    adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
                    spinner_C.setAdapter(adapter_C);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                spinner_C.setEnabled(false);
            }
        });


        /***
         * 初始化市下拉框
         */
        list_C.add("市");
        adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C);
        spinner_C.setAdapter(adapter_C);
        //spinner_C.setEnabled(false);
        spinner_C.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {//這個參數‘i’是選擇項的索引
                //每當選擇一個新的就會觸發這個事件,默認會選擇第一個,利用這個從這里設置
                if (adapter_C.getItem(i).equals("市")){//如果市下拉框選擇了市,市是默認顯示的
                    /*這兩句是重置區的下拉列表*/
                    list_Q.clear();//清除區的列表
                    list_Q.add("區縣");//添加一個區縣,

                    adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);//創建
                    spinner_Q.setAdapter(adapter_Q);//綁定

                }else{
                    /*這三句是重置區的下拉列表*/
                    list_Q.clear();
                    list_Q.add("區縣");
                    //添加符合要求的項目。自定義的一個方法,從區里找符合市里的地名,然后添加到list
                    mapTool_getList(q_Hashmap,list_Q,mapTool_getKey(c_Hashmap,adapter_C.getItem(i)),4);

                    adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
                    spinner_Q.setAdapter(adapter_Q);
                }
                //程前啟后,就完成了下拉列表的聯動,最后只用判別區縣框里面選擇的內容是否是“區縣”,就可辨別,具體情況具體考慮

            }

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

            }
        });

        /***
         * 初始化區縣下拉框
         */
        list_Q.add("區縣");
        adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);
        spinner_Q.setAdapter(adapter_Q);
        //spinner_Q.setEnabled(false);
        spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            }

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

            }
        });

        /***
         * 初始化監測類型下拉框
         */
        list_TP.add("類型");
        list_TP.add("雨量計");
        list_TP.add("泥位計");
        list_TP.add("地聲傳感器");
        list_TP.add("撞線傳感器");
        adapter_TP = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_TP);
        spinner_TP.setAdapter(adapter_TP);
        //spinner_TP.setEnabled(false);
        spinner_TP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            }

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

            }
        });

        //按鈕點擊事件
        btn_eq_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Log.d("test","run:btn_eq_ok查詢點擊:"+spinner_Q.getSelectedItem());

                //判別區縣框里面選擇的內容是否是“區縣”,就可辨別
               if (spinner_Q.getSelectedItem().equals("區縣")){
                   Toast.makeText(getActivity(),"請完善省/市/區縣",Toast.LENGTH_SHORT).show();
               }else {
      			//彈框提示
      			   Toast.makeText(getActivity(),mapTool_getKey(q_Hashmap,spinner_Q.getSelectedItem().toString()),Toast.LENGTH_SHORT).show();
               }
            }
        });
    }

說在最后

這里我也沒用自定義樣式,這個可以通過重寫adapter來實現,具體參考下面鏈接。簡書:Android 好用的下拉控件Spinner
CSDN:修改Android中Spinner的顯示及下拉樣式的四種方法
這里我就是使用了list來控制列表的更新和聯動,有的不懂得可以留言。本人也比較挫,寫不來隱藏的提示項,就干脆將就用吧,功能完成就行。
代碼還不懂的可以看下下面教程鏈接:C語言中文網:Android Spinner:下拉列表控件
在這里插入圖片描述
最后騷一句,祝大家情人節快樂
——2020.2.14
(你現在的表情一定很好笑,哈哈哈)
要是幫到你了,記得點個贊哦親!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM