Java Android微调器-防止刷新后关闭
我有一个下拉微调器,显示一个项目列表,在收到API的响应后,该列表每X秒更新一次 问题是当列表更新时,微调器会自动关闭。我希望它在刷新后保持打开状态Java Android微调器-防止刷新后关闭,java,android,spinner,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 js
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));
}
private void getItems(JSONArray j){
ArrayList items=新建ArrayList();
对于(int i=0;i
这是一个演示,演示了如何在保持打开的同时更新微调器
首先通过使用setAdapter
设置适配器来初始化微调器
然后,项目的更新就来了。我使用处理程序
来模拟更新。在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();
}
专用微调器微调器;
专用阵列适配器;
最终列表项=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
初始化espinner();
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
试一试{
字符串updateItems=“[{\'name\':\'test1\'},{\'name\':\'test2\'},{\'name\':\'test2\'}]”;
getItems(新JSONArray(updateItems));
}捕获(JSONException e){
e、 printStackTrace();
}
}
}, 10000);
}
私有void初始值espinner(){
项目。添加(“首字母”);
微调器=(微调器)findViewById(R.id.spinner);
adapter=new ArrayAdapter(TestActivity.this,android.R.layout.simple\u spinner\u dropdown\u items,items);
旋转器。设置适配器(适配器);
}
私有void getItems(JSONArray j){
对于(int i=0;i
这是一个演示,演示了如何在保持打开的同时更新微调器
首先通过使用setAdapter
设置适配器来初始化微调器
然后,项目的更新就来了。我使用处理程序
来模拟更新。在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();
}
专用微调器微调器;
专用阵列适配器;
最终列表项=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
初始化espinner();
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
试一试{
字符串updateItems=“[{\'name\':\'test1\'},{\'name\':\'test2\'},{\'name\':\'test2\'}]”;
getItems(新JSONArray(updateItems));
}捕获(JSONException e){
e、 printStackTrace();
}
}
}, 10000);
}
私有void初始值espinner(){
项目。添加(“首字母”);
微调器=(微调器)findViewById(R.id.spinner);
adapter=new ArrayAdapter(TestActivity.this,android.R.layout.simple\u spinner\u dropdown\u items,items);
旋转器。设置适配器(适配器);
}
私有void getItems(JSONArray j){
对于(int i=0;i
实际上,您只需要先初始化适配器并将其添加到微调器。然后加载数据,将数据添加到适配器并调用adapter.notifyDataSetChanged()
这是我的测试活动,你可以直接复制粘贴到你的活动中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
setContentView(linearLayout);
Spinner spinner = new Spinner(this);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, new ArrayList<String>());
spinner.setAdapter(adapter);
Button button = new Button(this);
button.setText("load data");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TestActivity.this.getWindow().getDecorView().getHandler().postDelayed(new Runnable() {
@Override
public void run() {
loadData();
}
}, 2000);
}
});
linearLayout.addView(spinner);
linearLayout.addView(button);
}
private void loadData() {
String jsonArray = "[\n" +
" {\n" +
" \"id\": \"1\",\n" +
" \"name\": \"dada1\"\n" +
" },\n" +
" {\n" +
" \"id\": \"2\",\n" +
" \"name\": \"dada2\"\n" +
" },\n" +
" {\n" +
" \"id\": \"3\",\n" +
" \"name\": \"dada3\"\n" +
" },\n" +
" {\n" +
" \"id\": \"4\",\n" +
" \"name\": \"dada4\"\n" +
" },\n" +
" \n" +
"]";
try {
getItems(new JSONArray(jsonArray));
} catch (JSONException e) {
e.printStackTrace();
}
}
private ArrayAdapter<String> adapter;
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();
}
}
adapter.addAll(items);
adapter.notifyDataSetChanged();
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout LinearLayout=新的LinearLayout(本);
linearLayout.setOrientation(linearLayout.VERTICAL);
linearLayout.setLayoutParams(新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.MATCH_父级));
setContentView(线性布局);
微调器微调器=新微调器(此);
adapter=new ArrayAdapter(这是android.R.layout.simple_微调器_下拉列表_项,new ArrayList());
旋转器。设置适配器(适配器);
按钮按钮=新按钮(此按钮);
setText(“加载数据”);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
TestActivity.this.getWindow().getDecorView().getHandler().postDelayed(新Runnable()){
@凌驾
公开募捐{
loadData();
}
}, 2000);
}
});
linearLayout.addView(微调器);
linearLayout.addView(按钮);
}
私有void loadData(){
字符串jsonArray=“[\n”+
“{\n”+
“id\:\“1\,\n”+
"