我正在使用微调器,该微调器通过向Web服务器发出 GET 请求来加载值。 但是问题在于微调器确实显示了加载的值(尽管最近),但是没有显示所选的值。 spinner image after selected
我检查了背景色。尝试在UI Thread上运行代码,但是不起作用。
<Spinner
android:id="@+id/setup_wizard_spinner_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Spinner>
活动
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;
}
答案 0 :(得分:1)
您正在从互联网上获取spinnerDataList
,这将需要一些时间来获取数据。
尝试返回LiveData并在“活动”中观察它,然后将列表设置为适配器。
您使用的是R.layout.support_simple_spinner_dropdown_item
,而不是ArrayAdapter构造函数中的R.layout.support_simple_spinner_item
。
设置布局资源以创建下拉视图
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
答案 1 :(得分:0)
已修复: 在UiThread中填充数据,在另一个线程中进行网络调用。等待线程完成执行。 这可能会使应用程序变慢,但是我对此表示同意,使用处理程序向微调器显示微调器,因为我的下一个任务更多地取决于我获取和选择的数据。