0

新手在这里。在贴代码之前,先简单说明一下。

  1. 我有一个小应用程序,它通过 http 加载数据,将其存储在 SQL Lite 数据库中并显示它 - 设置两个微调器,一个带有名称,一个带有星期几。选择姓名和星期几的组合会显示指示该人当天正在做什么的文本。当组合为选择时,它使用 SharedPreferences 保存。这一切都很好。

  2. 我在“刷新”按钮下设置了一个异步任务,以从服务器获取新数据。这会消失并获取数据,重新填充数据库并刷新显示。其中大部分工作正常,除了名称微调器始终重置为第一个条目,就好像它正在以某种方式重新初始化一样。

  3. 在调试它时,一切正常,直到异步任务结束在 Looper 类中。我不确定这是做什么的,但看起来像是在清理,并且在那里的某个地方,微调器被重置。

  4. 下面是异步任务,精简。

有任何想法吗?

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);

    }
}
4

1 回答 1

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() 以使适配器更新。

希望有帮助!

于 2012-04-09T02:41:55.367 回答