Program Club

어댑터로 목록보기를 동적으로 업데이트

proclub 2020. 11. 3. 19:27
반응형

어댑터로 목록보기를 동적으로 업데이트


자습서에서는 잘 작동하는 SimpleAdapter를 사용하지만 새 데이터가 입력 될 때 어댑터의 배열을 업데이트해야합니다.

SimpleAdapter가 아닌 다른 것을 사용하여 ListView를 업데이트하는 방법을 안내해 주시겠습니까?


ArrayList에서 지원 하는 ArrayAdapter를 사용하십시오 . 데이터를 변경하려면 목록의 데이터를 업데이트하고 adapter.notifyDataSetChanged ()를 호출하면됩니다 .


고유 한 어댑터를 만드는 경우 주목할만한 추상 함수가 하나 있습니다.

public void registerDataSetObserver(DataSetObserver observer) {
    ...
}

주어진 관찰자를 사용하여 시스템에 업데이트를 알릴 수 있습니다.

private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>();

public void registerDataSetObserver(DataSetObserver observer) {
    observers.add(observer);
}
public void notifyDataSetChanged(){
    for (DataSetObserver observer: observers) {
        observer.onChanged();
    }
}

SimpleAdapter 및 ArrayAdapter와 같은 것이 있으며 모든 작업을 수행 할 필요는 없지만 기쁘지 않습니까?


SimpleListAdapter는 주로 정적 데이터에 사용됩니다! 동적 데이터를 처리하려면 데이터가 데이터베이스에서 들어오는 경우 ArrayAdapter , ListAdapter 또는 CursorAdapter를 사용하는 것이 좋습니다 .

다음 은 ListAdapter의 바인딩 데이터를 이해 하는 데 유용한 자습서입니다.

SO 질문 에서 언급했듯이


대부분의 사람들은 사용을 권장 notifyDataSetChanged()하지만 이 링크가 매우 유용하다는 것을 알았습니다 . 실제로 사용 clear하고 add더 적은 메모리 공간을 사용하고 더 많은 응답 앱을 사용하여 동일한 목표를 달성 할 수 있습니다.

예를 들면 :

notesListAdapter.clear();
notes = new ArrayList<Note>();
notesListAdapter.add(todayNote);
if (birthdayNote != null) notesListAdapter.add(birthdayNote);

/* no need to refresh, let the adaptor do its job */

참고 URL : https://stackoverflow.com/questions/5320358/update-listview-dynamically-with-adapter

반응형