我有一个下拉微调器,显示项目列表,并且此列表在收到 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/