보통 아래와 같이 Adapter에 추가(또는 삭제) 하고 notifyDataSetChanged()를 호출하면 ListView 가 새로고침 된다고 한다.
하지만 아무런 변화가 없다.
1
2
|
listAdapter.addItem(ds);
listAdapter.notifyDataSetChanged();
|
cs |
그래서 구글링해보니..
ListView 최초 생성때와 같이 setAdapter 를 하라고 한다. 잘 동작한다.
1
2
|
listAdapter = new MainListAdapter(getActivity(), ArrayList<DataSet> mStrData);
mainListView.setAdapter(listAdapter);
|
cs |
하지만 서버로 부터 실시간으로 많은 데이터를 받아와서 ListView 에 추가하였더니 화면이 버벅거리는 현상이 발생하였다. 구형 폰에서는 거의 화면이 뚝뚝 끊겨 보이기까지 한다.
아래와 같이 수정후 자연스럽게 동작하는 것을 확인하였다.
주석 부분과 같이 데이터 크기 넣어주고 notifyDataSetChanged()를 호출하면 버벅임 없이 잘 동작한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
listAdapter.updateReceiptsList(mStrData); // 새로운 데이터 배열을 넣자
public class MainListAdapter extends BaseAdapter {
private ArrayList<DataSet> m_oData = null;
private int nListCnt = 0;
...........................
public void addItem(DataSet ds){
m_oData.add(0, ds);
nListCnt = m_oData.size(); // 배열 사이즈 다시 확인
this.notifyDataSetChanged(); // 호출후에 하던지 아니면. 그냥 여기서 하자
}
public void updateReceiptsList(ArrayList<DataSet> _oData) {
m_oData = _oData;
nListCnt = m_oData.size(); // 배열 사이즈 다시 확인
this.notifyDataSetChanged(); // 그냥 여기서 하자
}
@Override
public int getCount(){
return nListCnt; // 또는 m_oData.size();
}
...........................
}
|
cs |
간단히 수정할수 있는 부분인데 쓸데없이 시간만 소비하고 ㅋㅋ. 역시 기초가 튼튼해야함.
'프로그램개발' 카테고리의 다른 글
[Android] 화면 자동 회전 On/Off (0) | 2020.04.09 |
---|---|
[Android] 다른 앱 위에 그리기 (With Service, Overlay View) (8) | 2020.03.26 |
[Android] RSS 뉴스, XML 파싱하기 (7) | 2020.03.18 |
[Android] Android Studio에서 기기 화면 캡쳐하기 (0) | 2020.03.17 |