选择时微调器不显示数据,最近也显示微调器数据
Spinner doesn't show data when selected, also shows the spinner data lately
我正在使用一个微调器,它通过向我的网络服务器发出 GET 请求来加载值。
但问题是微调器确实显示了加载的值(尽管最近),但没有显示选定的值。
spinner image after selected
我检查了背景颜色。尝试 运行 UI 线程上的代码,但它不起作用。
<Spinner
android:id="@+id/setup_wizard_spinner_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Spinner>
activity
adapterYear = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, viewModel.getData("Year"));
iYearSpinner.setAdapter(adapterYear);
方法
public List<String> getData(String query){
OkHttpClient httpClient = new OkHttpClient();
String URL = "mysite.com?query=" + query;
List<String> spinnerDataList = new ArrayList<String>();
Request request = new Request.Builder()
.url(URL)
.build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if(response.isSuccessful()){
String webResponse = response.body().string();
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(webResponse);
} catch (JSONException e) {
e.printStackTrace();
}
for (int i=0;i<jsonArray.length();i++){
spinnerDataList.add(jsonArray.optString(i));
}
}
}
});
return spinnerDataList;
}
您正在从互联网上获取 spinnerDataList
,获取数据需要一些时间。
尝试返回 LiveData 并在 Activity 中观察它,然后将列表设置到适配器。
您正在使用 R.layout.support_simple_spinner_dropdown_item
而不是在 ArrayAdapter 构造函数中使用 R.layout.support_simple_spinner_item
。
设置布局资源以创建下拉视图
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
修正:
在 UiThread 中填充数据,在另一个线程中进行网络调用。等待线程执行完毕。
它可能会减慢应用程序的速度,但我对此没有意见,因为我的下一个任务更多地取决于我获得的数据和 select.
,所以我使用处理程序来显示微调器
我正在使用一个微调器,它通过向我的网络服务器发出 GET 请求来加载值。 但问题是微调器确实显示了加载的值(尽管最近),但没有显示选定的值。 spinner image after selected
我检查了背景颜色。尝试 运行 UI 线程上的代码,但它不起作用。
<Spinner
android:id="@+id/setup_wizard_spinner_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Spinner>
activity
adapterYear = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, viewModel.getData("Year"));
iYearSpinner.setAdapter(adapterYear);
方法
public List<String> getData(String query){
OkHttpClient httpClient = new OkHttpClient();
String URL = "mysite.com?query=" + query;
List<String> spinnerDataList = new ArrayList<String>();
Request request = new Request.Builder()
.url(URL)
.build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if(response.isSuccessful()){
String webResponse = response.body().string();
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(webResponse);
} catch (JSONException e) {
e.printStackTrace();
}
for (int i=0;i<jsonArray.length();i++){
spinnerDataList.add(jsonArray.optString(i));
}
}
}
});
return spinnerDataList;
}
您正在从互联网上获取 spinnerDataList
,获取数据需要一些时间。
尝试返回 LiveData 并在 Activity 中观察它,然后将列表设置到适配器。
您正在使用 R.layout.support_simple_spinner_dropdown_item
而不是在 ArrayAdapter 构造函数中使用 R.layout.support_simple_spinner_item
。
设置布局资源以创建下拉视图
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
修正: 在 UiThread 中填充数据,在另一个线程中进行网络调用。等待线程执行完毕。 它可能会减慢应用程序的速度,但我对此没有意见,因为我的下一个任务更多地取决于我获得的数据和 select.
,所以我使用处理程序来显示微调器