2012-04-09 8 views
0

初心者ここに。 コードを転記する前に、簡単な説明。非同期タスクは私のスピナーをリセットします

  1. 私は、SQL Liteデータベースに格納し、HTTP経由でデータをロードする小さなアプリを持っているし、それを表示する - 2つのスピナー、名前の1と曜日と1を設定します。名前と曜日の組み合わせを選択すると、その日に何をしているのかを示すテキストが表示されます。組み合わせが選択されている場合、SharedPreferencesを使用して保存されます。すべてこれはうまく動作します。

  2. サーバーから新しいデータを取得して取得するために、「更新」ボタンの下に非同期タスクを設定しました。これは遠ざかり、データを取得し、データベースを再投入し、表示をリフレッシュします。これのほとんどはうまくいきますが、名前スピナーは、何とか再初期化されているかのように、常に最初のエントリにリセットされます。

  3. これをデバッグすると、すべて非同期タスクがLooperクラスで終了するまでうまく動作します。私はこれが何であるかは分かりませんが、いくつかの清掃のように見え、そこのどこかにスピナーがリセットされています。

  4. 以下は非同期タスクです。

これはあなたのためにそれを行うだろうが、それはあなたが新しいアダプタにonPostExecuteが実行されるたびに作成しているという事実とは何かを持っている可能性がある場合

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

これはスピナーです。 ProgressBarは循環型の権利ですか?それは実際に直線的な進展を示していません、それはちょうど '秒をホールドアップ'を意味する回転円です。だからあなたがリセットを言うと、どういう意味ですか? AsyncTaskを完了している間にスピナーを使用するプログラムがあるので、応答する前に問題を理解しておきたいだけです。 – Davek804

+0

@ Davek804:いいえ、Androidの「スピナー」は基本的にはドロップダウンリストです。彼らがスピナーという名前をつけた理由は決して解明されていません。 – Squonk

+0

良いこと私は全体の反応を出して、自分自身を馬鹿のように見せてくれませんでした!うまくいけば、誰かがこの問題を解決することができます:) – Davek804

答えて

1

わかりません。あなたはどこかに(多分のonCreate)をonPostExecuteから次の行を削除することができます:

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()を呼び出して更新するアダプターを取得する必要があります。

希望に役立ちます!

関連する問題