新手在这里。 在发布代码之前,先简单说明。
我有一个小应用程序,它通过http加载数据,将其存储在SQL Lite数据库中,并显示它 - 设置两个微调器,一个带有名称,一个带有一周中的某一天。为名称和星期几选择组合会显示指示该人当天正在做什么的文本。选择组合时,使用SharedPreferences保存。这一切都很好。
我在“刷新”按钮下设置了异步任务,以便从服务器获取新数据。这消失并获取数据,重新填充数据库,并刷新显示。大多数工作正常,除了名称微调器总是重置为第一个条目,就好像它以某种方式重新初始化。
在调试时,一切正常,直到异步任务在Looper类中结束。我不确定这是做什么的,但看起来有些清理,在那里的某处,旋转器被重置。
以下是异步任务,已剥离。
有什么想法吗?
private class GetDataAsyncTask extends AsyncTask<String, Void, String> {
String response = "";
ProgressBar pb=(ProgressBar)findViewById(R.id.progressBar2);
Spinner spinner1 = (Spinner) findViewById( R.id.spinner1 );
@Override
protected void onPreExecute() {
pb.setVisibility(View.VISIBLE);
pb.setMax(100);
super.onPreExecute();
}
@Override
protected String doInBackground(String... mystring) {
//get database
response=get_data_from_PMS();
Load_Arrays_with_stored_data();
return response;
}
@Override
protected void onPostExecute(String result) {
// display new updated consultant list
ArrayAdapter adapter_cons = new ArrayAdapter(whereisthatconsultantActivity.this,android.R.layout.simple_spinner_item, cons_spinner);
spinner1.setAdapter(adapter_cons);
adapter_cons.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//
spinner1.setSelection(GetDisplayVal("selconspos"));
//
textView2.setText(display_stored_data());
//
pb.setVisibility(View.INVISIBLE);
}
}
答案 0 :(得分:1)
不确定这是否适合您,但它可能与您每次执行onPostExecute时创建新适配器的事实有关。你可以将onPostExecute中的以下行删除到其他地方(也许是onCreate):
ArrayAdapter adapter_cons = new ArrayAdapter(whereisthatconsultantActivity.this,android.R.layout.simple_spinner_item, cons_spinner);
spinner1.setAdapter(adapter_cons);
adapter_cons.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
然后将onPostExecute更改为以下内容:
@Override
protected void onPostExecute(String result) {
adapter_cons.notifyDataSetChanged();
spinner1.setSelection(GetDisplayVal("selconspos"));
textView2.setText(display_stored_data());
pb.setVisibility(View.INVISIBLE);
}
那应该更新你的适配器假设,因为我很难从代码中确定你在doInBackground()中为你的适配器分配新数据。每次更新适配器中的数据时,必须调用notifyDataSetChanged()以使适配器更新。
希望有所帮助!