异步任务重置我的微调器

时间:2012-04-09 01:26:02

标签: android asynchronous spinner

新手在这里。 在发布代码之前,先简单说明。

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

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

  3. 在调试时,一切正常,直到异步任务在Looper类中结束。我不确定这是做什么的,但看起来有些清理,在那里的某处,旋转器被重置。

  4. 以下是异步任务,已剥离。

  5. 有什么想法吗?

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

1 个答案:

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

希望有所帮助!