平时感觉很多地方都用得上,数据库中直接显示内码识别度不高。所以需要显示名字,但是后台又需要内码进行操作。所以就做了简单的一系列操作(数据量不多适用,数据量较多可以自行优化;当然一般用下拉框加载数据量也不会很多。):
以产线为例子:
private HashMap<String,String> LinehashMap = null; //产线数据mp private int LineID =0;//产线内码
//获取产线数据 private void initLine(){ final Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { LinehashMap = (HashMap<String,String>)msg.obj; if (LinehashMap != null){ SetSpinner(LinehashMap); }else { //自己写的提示框,可以用Toast代替 showExitDialog("产线数据不存在"); } } }; Runnable run=new Runnable() { @Override public void run() { Message message=new Message(); DAL.DB dal = new DAL.DB(); message.obj=dal.GetLine(); handler.sendMessage(message); } }; new Thread(run).start(); }
//把HashMap写入到下拉框并监控获得内码
private void SetSpinner(HashMap<String,String> hashMap){ final Spinner cmbModel =(Spinner)findViewById(R.id.SpinnerLine); List<String> list = new ArrayList<>(); int LineCount = 0; if (hashMap != null){ int i = 0; for (String o : hashMap.keySet()) { list.add(o); //System.out.println("key=" + o + " value=" + tempMap.get(o)); //根据历史记录查询出的LineID找到默认值的索引 if (LineID != 0 && LineID == Integer.parseInt(hashMap.get(o))) LineCount = i; i++; } //如果LineID为空,则赋选项中第一个值 if (LineID == 0) LineID=Integer.parseInt(hashMap.get(list.get(0))); //适配器 ArrayAdapter<String> arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); //设置样式 arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 cmbModel.setAdapter(arr_adapter); // 设置默认选中值 cmbModel.setSelection(LineCount); //监听 cmbModel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String data = (String)cmbModel.getItemAtPosition(position);//从spinner中获取被选择的数据 LineID = Integer.parseInt(LinehashMap.get(data)); //保存该用户最后选中的产线作为历史记录 SaveUserLine(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } }