spinner:获取选中值的三种方法

spinner:获取选中值的三种方法

spinner:获取选中值的三种方法



spinner绑定的值一般分3种形式存放:

    1、存放在java页面的数组中:{“陕西”,”深圳”,”北京”}


private String[] province= {
   "江西", "湖南","西安"};
private String[][] city = {
   {
   "城市", "景点"}, {
   "张家界", "长沙"},
        {
   "吃喝玩乐", "biangbiang面"}};
private String[][][] zone = {
   {
   {
   "南昌", "赣州"}, {
   "庐山", "龙虎山"},},
        {
   {
   "黄石寨", "森林公园"}, {
   "临潼", "兵马俑"},}};

    2、存放在strings.xml文件中


最新的京东省市区XML点击下载就好,没办法还的花积分下载,最少两积分,这是我自己网上整理的,本着解决问题,却不能免费下载,抱歉.



    3、存放在数据库中,调用接口获得


    1、2是在一般的页面中比较常用,个人推荐第2种。这样你的页面看起来不会很乱/繁杂,而且一般把值存放在xml中,看起来比较专业。比如values文件夹中的:arrays.xml、colors.xml、ids.xml、strings.xml、styles.xml等等。第一种,本地的数组,对比而言第二种代码优化起来会更容易.

    3是需要调用接口,前几天遇到获取从接口获取数据,这几天闲了下来,记录自己当时遇到的问题和方法,防止以后用到就可以来看。

    下面就来对第三种方式的取值,进行说明。


对于下拉框的选择,spinner,听着像是很基础,这里我就不做任何的介绍.大家如果有什么问题可以去Google或者baidu都是很好很直接的方法.这次遇到的spinner,以前项目中并没有类似的需求.多的只是城市的三级关联,但是也没有这种需求:级级关联,通过一个表的id获取另一张表的name,再通过第二张表的id来获取第三张表name.这种是通过拼接参数来通过共同的id来实现查询本表的id或者其他属性,来更新ui 适配布局,数据刷新,spinner来选择对应的列表值.

spinner:获取选中值的三种方法


其中如图,生产线和生产工单以及生产中心,全都是三级关联根据产线选择工单,再之根据工单选择工作中心.

下面这篇文章也是对spinner有所介绍,当时开发的时候也提供了不少帮助.


这个时候,大家在面临spinner应该多少已经了解了,
Spinner,竟然不能默认不选中和修改默认显示内容
面对这个问题,开始想怎么才能解决系统自带的这个属性而完成我想要的需求,那么就要自定义一个Spinner.

spinner:获取选中值的三种方法

代码以及自定义的SPinner我都放在文件夹.然后我们开始写自己的布局,写完根据上面描述根据参数掉接口.
当然我们每个人用的框架和数据data全都不一样这边我展示自己获取数据的方法:

//region 生产线
private void getLine() {
    Gson gson = new Gson();
    //获取生产线的接口
    String json = tool.doGet(Globe.Base_Biz_Url + "/getLine");
    //实体
    LineVo liveVo = gson.fromJson(json, new TypeToken<LineVo>() {
    }.getType());
    if (liveVo.status == 200) {
        try {
            JSONObject jsonObj = new JSONObject(json);
            String data = "";
            data = jsonObj.getString("data").toString();
            if (data != "") {
                List<Line> listLine = gson.fromJson(data, new TypeToken<List<Line>>() {
                }.getType());
                //默认==请选择  供用户选择生产线
                KeyValueInfo ky = new KeyValueInfo("请选择", "-1");
                LineList.add(ky);
                //遍历获取LineName
                for (int i = 0; i < listLine.size(); i++) {
                    KeyValueInfo keyValue = new KeyValueInfo(listLine.get(i).getLineName(), listLine.get(i).getLineCode());
                    //添加的到生产线的List集合
                    LineList.add(keyValue);
                }
                //自定义的Spinner布局用的是listview这里用到了适配器ArrayAdapter
                ArrayAdapter<KeyValueInfo> arrayAdapter = new ArrayAdapter<KeyValueInfo>(this, android.R.layout.simple_spinner_dropdown_item, LineList);
                spLine.setAdapter(arrayAdapter);
                spLine.setSelection(0, false);
                spLine.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        String LineCode = ((KeyValueInfo) (spLine.getSelectedItem())).getValue();
                        //清除数据
                        WorkOrderList.clear();
                        spWorkOrder.setAdapter(null);
                        WorkCenterList.clear();
                        spWorkCenter.setAdapter(null);
                        GetWorkOrder(LineCode);//获取生产工单
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub  }
                });
            }
        } catch (JSONException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
//endregion

接下来同样的方法,根据LineCode获取WokeOrderId来获取生产工单

//region 获取生产工单
private void GetWorkOrder(String lineCode) {
    Gson gson1 = new Gson();
    StringBuilder sb = new StringBuilder(Globe.Base_Biz_Url + "/getWorkOrderByLineCode");
    sb.append("/");
    sb.append(lineCode);
    String jsonList = tool.doGet(sb.toString());
    WorkOrderVo mOrderVo = gson1.fromJson(jsonList, new TypeToken<WorkOrderVo>() {
    }.getType());
    if (mOrderVo.status == 200) {
        JSONObject jsonObjList = null;
        try {
            jsonObjList = new JSONObject(jsonList);
            String dataList = "";
            dataList = jsonObjList.getString("data").toString();
            if (dataList != "") {
                List<WorkOrder> list = gson1.fromJson(dataList, new TypeToken<List<WorkOrder>>() {
                }.getType());
                KeyValueInfo ky = new KeyValueInfo("请选择", "-1");
                WorkOrderList.add(ky);
                for (int i = 0; i < list.size(); i++) {
                    KeyValueInfo keyValue = new KeyValueInfo(list.get(i).getSubWorkOrder(), list.get(i).getId());
                    WorkOrderList.add(keyValue);
                }
                ArrayAdapter<KeyValueInfo> arrayAdapter = new ArrayAdapter<KeyValueInfo>(this, android.R.layout.simple_spinner_dropdown_item, WorkOrderList);
                spWorkOrder.setAdapter(arrayAdapter);
                //spWorkOrder.setSelection(0, false);
                spWorkOrder.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        WorkCenterList.clear();
                        spWorkCenter.setAdapter(null);
                        String workOrderId = ((KeyValueInfo) (spWorkOrder.getSelectedItem())).getValue();
                        GetWcCode(workOrderId);
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub  }
                });
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
//endregion

到这里生产工单已经获取到了.基本已经完成,通过上面的案列,这个界面的数据已经
可以通过调接口获取到数据.有什么问题可以评论或者私信.



犯了错,总之要改,改之后呢,最好还是记录。因为这些难题在后来的日子还是会遇到。不妨到时候回过头看看自己当时记录的错误。毕竟是自己的错,资以改正。


纸上得来终觉浅,书到用时方恨少。希望对你有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115055.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Shiro框架学习

    Shiro框架学习shiro (java安全框架) 编辑ApacheShiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。软件名称ApacheShiro开发商Apache性    质Java安全框架主要功能三个核心组件:Subject,SecurityManage…

    2025年10月9日
    4
  • 回归分析详解及matlab实现[通俗易懂]

    回归分析详解及matlab实现[通俗易懂] 回归分析方法 想要资源的请关注公众号:在一起的足球自动获取资源和数十种经典算法,帮助各位提升自己之前留的是自己的qq号感觉好多资源都不能让大家自行选择本着开源的精神,在公众号挂了百度云链接,这样晚上就不用被吵醒了当人们对研究对象的内在特性和各因素间的关系有比较充分的认识时,一般用机理分析方法建立数学模型。如果由于客观事物内部规律的复杂性及人们认识程度的限制,无法分析实际对象内在的因果关系,…

    2025年7月20日
    6
  • golang下文件锁的使用[通俗易懂]

    golang下文件锁的使用[通俗易懂]前言题目是golang下文件锁的使用,但本文的目的其实是通过golang下的文件锁的使用方法,来一窥文件锁背后的机制。为什么需要文件锁只有多线程/多进程这种并发场景下读写文件,才需要加锁,场景1-读写并发读写并发场景下,如果不加锁,就会出现读到脏数据的情况。想象一下,读文件的进程,读到第500字节,有其它进程以覆盖写的方式向文件中写入1000字节,那读进程读到的后500字节就是脏数据。场景2-写写并发写写并发场景下,如果不加锁,假设A进程先写0-1000字节,B进程写0-900字节,以此类

    2022年6月28日
    28
  • 像素填充率

    像素填充率像素填充率

    2022年4月22日
    43
  • 一个一个添加好友太麻烦,教你全自动添加好友

    一个一个添加好友太麻烦,教你全自动添加好友

    2021年9月17日
    120
  • SwipeRefreshLayout 使用

    SwipeRefreshLayout 使用SwipeRefreshLayout使用v4包下SwipeRefreshLayout支持listView,webView,scrollView,recyclerView等在布局中使用SwipeRefreshLayout将需要下拉刷新的控件包裹。当这些控件滑动到边缘时会触发SwipeRefreshLayout.onRefresh();到此便完成了一次下拉刷新的操作。使用如下方法改变划出的

    2022年6月25日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号