2016-05-31 6 views
0

웹 서비스에서 json을 통해 스피너를 채 웁니다. 회 전자가 채워지고 인덱스 0을 선택하면 onitemselected 메서드가 실행되고 회 전자의 값을 기반으로 목록보기를 채우는 다른 메서드가 시작됩니다.스피너 선택은 업데이트되는 스피너 항목 이전의 레코드입니다.

스피너에 다른 데이터를 다시 채우면 문제가 발생합니다. Spinner가 채워지면 색인 0이 선택되고 onitemselected fire가 선택되고 선택한 항목을 출력하면 이전 항목이 0 색인에 표시됩니다. spinneritems.get은 새로 채워진 데이터가 아닌 이전 데이터를 가져옵니다. 여기

는 회 전자

for (int i = 0; i < recordsArray.length(); i++) { 
    JSONObject record = recordsArray.getJSONObject(i); 
    Map<String, String> datum = new HashMap<String, String>(2); 
    datum.put("code", record.getString("id") + " - " + record.getString("heading")); 
    datum.put("description", record.getString("body")); 
    spinneritems.add(datum); 
    adapter.notifyDataSetChanged(); 
    spinner.setSelection(0); 
} 

그 다음 그것은 모두 잘 처음 작동

final Spinner spinner = (Spinner)findViewById(R.id.comSpinner); 
String spinnerItem = spinneritems.get(spinner.getSelectedItemPosition()).get("code"); 

와 메소드를 호출

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {  
       populateList(page); 
      } 

의 발사에 이르게을 채우고 그것을 실행되지만, 회 전자 내용을 변경하는 작업을 수행 할 때 끝에있는 메서드는 이전 데이터를 계속 가져옵니다. 어떤 이유로 든

답변

1

해결했습니다. 처음에 어댑터를 설정하기 전에 다음을 수행합니다.

final Spinner spinner = (Spinner) findViewById(R.id.comSpinner); 
spinneritems.clear(); 
adapter.notifyDataSetChanged(); 
spinner.setAdapter(adapter);