2012-04-09 2 views
0

새내기. 코드를 게시하기 전에 간단한 설명. 비동기 작업으로 내 스피너가 재설정됩니다

  1. 가 나는 SQL 라이트 데이터베이스에 저장합니다, HTTP를 통해 데이터를로드하는 작은 응용 프로그램을 가지고, 그것은 표시 - 두 스피너, 이름 하나 요일 하나를 설정. 이름과 요일의 조합을 선택하면 그 사람이 그 날에 무엇을했는지 나타내는 텍스트가 표시됩니다. 조합이 선택되면 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 'Spinner'는 기본적으로 드롭 다운 목록입니다. 왜 그들이 '스피너 (Spinner)'라는 이름을 지었는지 절대로 알지 못했습니다. – 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()를 호출하여 업데이트 할 어댑터를 가져와야합니다.

희망 하시겠습니까?

관련 문제