选择时微调器不显示数据,最近也显示微调器数据

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.

,所以我使用处理程序来显示微调器