如何显示具有隐藏值的微调器

How to Display a spinner with Hidden Values

在我的应用程序中,我有一些 Spinners 填充了 JSON 数据

此应用程序用于记录工作时间

所以我正在努力解决的问题是,其中一个微调器必须显示与传递给 URL 的值不同的值 posting

基本上 Spinner 会显示 3 个这样的项目

1 项示例,

UserID - UserRate - Value

所以它在微调器中看起来像这样

7 - 1 - 0

整个字符串是 1 Json 数组中的对象

我使用 userID 和服务器端的第二个号码 post 信息到 table 来记录时间 所以我只想在微调器下拉列表中显示 $200,但将整行传递给 URL for posting

填充微调器的代码

 private void LoadUserRatesSpinnerData(String url) {
        RequestQueue requestQueue=Volley.newRequestQueue(getApplicationContext());
        StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {
                    JSONObject jsonObject=new JSONObject(response);
                    if (jsonObject.getInt("success") == 1) {
                        JSONArray jsonArray=jsonObject.getJSONArray("Name");
                        for (int i=0; i < jsonArray.length(); i++) {
                            JSONObject jsonObject1=jsonArray.getJSONObject(i);
                            String rates=jsonObject1.getString("UserRate");
                            UserRate.add(rates);
                        }
                    }
                    UserRatesSpinner.setAdapter(new ArrayAdapter<>(IntTimeLog.this, android.R.layout.simple_spinner_dropdown_item, UserRate));
                } catch (JSONException e) {
                    e.printStackTrace();


                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                error.printStackTrace();
            }
        });
        int socketTimeout=30000;
        RetryPolicy policy=new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    }

在 Spinner 中显示时,您实际上应该使用 RegX 来格式化此文本, 您的 REGX 可能看起来像这样

final String str = "7 - 1 - 0";
final Matcher matcher = Pattern.compile("$").matcher(str);
if(matcher.find()){
    System.out.println(str.substring(matcher.end()).trim()); //This should give you 200
}

你可以像这样实现同样的效果

 yourSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
         String value = yourList.get(position);
          String[]array = value.split("-")
          String yourValue = array[2].trim();
        }

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

        }
    });

使用 Vinay 的回答,我对其进行了编辑并使其正常工作 我添加了一个 For 循环并编辑了匹配器

  for(int p=0; p < 100; p++){
                            final Matcher matcher=Pattern.compile(" - ").matcher(rates);
                            if (matcher.find()) {
                                rates =rates.substring(matcher.end()).trim();