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

时间:2020-06-16 16:10:03

标签: android spinner

我正在使用微调器,该微调器通过向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;
 }

2 个答案:

答案 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中填充数据,在另一个线程中进行网络调用。等待线程完成执行。 这可能会使应用程序变慢,但是我对此表示同意,使用处理程序向微调器显示微调器,因为我的下一个任务更多地取决于我获取和选择的数据。