java - Android Spinner - 防止刷新后关闭

标签 java android spinner android-spinner

我有一个下拉微调器,显示项目列表,并且此列表在收到 API 响应后每 X 秒更新一次。

问题是当列表更新时,微调框会自动关闭。我希望它在刷新后保持打开状态。

private void getItems(JSONArray j){
   ArrayList<String> items = new ArrayList<>();

   for (int i=0; i < j.length(); i++){
       try {
           //Getting json object
           JSONObject json = j.getJSONObject(i);

           //Adding the name of the student to array list
           items.add(json.getString("name"));
       } catch (JSONException e) {
           e.printStackTrace();
       }
   }
   spinner.setAdapter(new ArrayAdapter<>(BaseActivity.this, android.R.layout.simple_spinner_dropdown_item, items));
}

最佳答案

此演示展示了如何在保持 Spinner 打开的情况下更新它。

首先通过使用 setAdapter 设置 adapter 来初始化 Spinner

然后这些元素就会有更新。我使用 Handler 来模拟更新。在 getItems 方法中,不要创建新的适配器(如您所做的那样),而是使用 notifyDataSetChanged 来通知适配器数据集已更改。

代码如下。

private Spinner spinner;
private ArrayAdapter<String> adapter;
final List<String> items = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    initializeSpinner();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            try {
                String updatedItems = "[{\"name\" : \"test1\"}, {\"name\" : \"test2\"}, {\"name\" : \"test2\"}]";
                getItems(new JSONArray(updatedItems));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, 10000);

}


private void initializeSpinner() {
    items.add("initial");

    spinner = (Spinner) findViewById(R.id.spinner);
    adapter = new ArrayAdapter<String>(TestActivity.this, android.R.layout.simple_spinner_dropdown_item, items);
    spinner.setAdapter(adapter);
}

private void getItems(JSONArray j) {
    for (int i = 0; i < j.length(); i++) {
        try {
            //Getting json object
            JSONObject json = j.getJSONObject(i);

            //Adding the name of the student to array list
            items.add(json.getString("name"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    adapter.notifyDataSetChanged();
}

关于java - Android Spinner - 防止刷新后关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733216/

相关文章:

java - 具有多个用例的onOff开关的SharedPreferences

android - 页脚和页眉未添加到 android ListView - 错误修复

java - "getOnItemSelectedListener"方法不适用于微调器

java - 如何在 hibernate 标识符生成器中获取 bean?

java - 如何将SelectHandler添加到TabitemConfig Gxt3?

android - 如何使用位图作为通知图标

android - Android 中 AlarmManager 行为的说明

android - 每个项目具有不同 View 的微调器

android - 如何在小部件右侧创建没有向下三角形的android微调器

Java 函数泛型