首页 > 解决方案 > 我的微调器不显示所选项目并且不调用 onItemSelected

问题描述

我有一个允许用户选择翻译的 android 微调器。我可以点击微调器,它会显示一个包含可用翻译的列表,但是当我在列表中选择一个项目时,它不会出现在微调器中,也不会调用 onItemSelected 方法。

这是微调器的 xml 代码:

<Spinner
    android:id="@+id/trans_list"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_toRightOf="@+id/chap_list"
    android:layout_weight="1" />

这是启动微调器的相关代码。(编辑)此代码是从 Fragment 类内部运行的,而不是从我的 MainActivity 类中运行的:

    trans_spinner = v.findViewById(R.id.trans_list);

    ArrayAdapter<String> adapter = new ArrayAdapter<>(v.getContext(), android.R.layout.simple_spinner_dropdown_item, translations);

    trans_spinner.setAdapter(adapter);

    trans_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String translation = trans_spinner.getItemAtPosition(trans_spinner.getSelectedItemPosition()).toString();
            Log.d("trans", translation);
            Toast.makeText(view.getContext(), translation, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            Log.d("test", "1");
        }
    });

    trans_spinner.setSelection(1);

当我选择一个项目时,不会调用 onItemSelected() 或 onNothingSelected() 方法。我发现这个页面描述了一个与我的问题非常相似的问题: Android Spinner will not launch OnItemSelected and current selected item is not displayed in Spinner 但是用户没有针对他们的问题提出明确的解决方案,因此对我没有多大帮助。

我不确定它是否相关,但微调器中的项目取自提供 JSON 数据以填充微调器的在线网页。这似乎有效,因为选项确实出现在微调器列表中。问题是,在选择其中一个时,微调器显示为空,并且侦听器不执行任何操作。

标签: androidlistenerspinner

解决方案


所以我发现问题实际上是因为我如何获得要放入微调器的字符串列表。如原始帖子中所述,我正在从网页中以 JSON 格式加载字符串值。我为此使用了 Retrofit2 API。

问题是由于我正在下载这些数据,然后在我的片段的 onCreateView() 方法中初始化微调器。我所做的修复它是我创建了一个初始化微调器的新方法,然后我会从 Retrofit API 使用的 onResponse() 方法调用它。这意味着它在完成下载/填充字符串列表之前不会初始化微调器。


推荐阅读