나는 Activity가 ListView
입니다. AsyncTask
을 사용하여 서버에서 데이터를 가져 와서 목록에 채 웁니다.서버에 새 데이터를 보내면 ListView를 새로 고칩니다.
작업 표시 줄을 클릭하면 새로운 활동이 시작됩니다 (대화 상자와 같은 스타일) - 사용자가 일부 데이터 클릭을 "보내기"하고 서버에 보냅니다. 그런 다음이 Dialog-Activity가 닫히고 목록을 새로 고치고 새 데이터를 추가 할 때 이전 대화 상자로 돌아갑니다.
onResume()
메서드에서 AsyncTask를 실행하려고 시도했지만 이전 데이터와 함께 새 데이터를 가져 오는 동안 AsyncTask가 onCreate()에서도 실행되기 때문에 두 번 모두 가져옵니다.
1) 처음으로 활동이 onStart, onCreate and onResume
까지 진행되므로 목록 데이터가 두 번 표시됩니다. 플래그와 같은 것을 사용하여 처음으로 활동 시작시 해당 코드가 실행되지 않아야합니까?
2) 서버의 데이터를 채우는 이래로 notifyDataSetChanged
이 어떻게 도움이되는지 생각할 수 없습니다. 확장 어댑터가 ArrayAdapter
입니다.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
JSONSpotTask task = new JSONSpotTask(); //task
task.execute();
try {
task.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list1 = (ListView) findViewById(R.id.listview1);
ta = new TipsAdapter(this, R.layout.row_list_item, results);
list1.setAdapter(ta);
}
@Override
protected void onResume() {
super.onResume();
JSONSpotTask task = new JSONSpotTask(); //task
task.execute();
try {
task.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list1 = (ListView) findViewById(R.id.listview1);
ta = new TipsAdapter(this, R.layout.row_list_item, results);
list1.setAdapter(ta);
}
코드는
문제는 익숙하다고 생각합니다. 전체 소스 코드가 도움이 될 것입니다! –
onResume()에서 AsyncTask ** 만 실행해도 문제가 없지만 AsyncTask 코드를 onResume()에서 실행하고 onCreate()에서 아무것도 실행하지 않아도됩니까? – test2558
예 - 내 대답을보십시오 - 아마 그 방법이 더 좋습니다. –