zoukankan      html  css  js  c++  java
  • 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
    (你现在的表情一定很好笑,哈哈哈)
    要是帮到你了,记得点个赞哦亲!

  • 相关阅读:
    codeforces.com/problemset/problem/213/C
    资源Createwindow,对应标识符,绑定窗口
    字符编码地址空间
    该来的还是要来,数据挖掘
    深信服准备
    K-Sum
    2017.3.20下午
    2017.3.20上午
    2017.3.17下午
    2017.3.17上午
  • 原文地址:https://www.cnblogs.com/botinghub/p/12329093.html
Copyright © 2011-2022 走看看