如何显示具有隐藏值的微调器
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();
在我的应用程序中,我有一些 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();