운영체제 : Windows 8.1 64bit 개발툴 : Android Studio 1.5 SDK Version : Min 19, Max 24 작성날짜 : 2016-08-05 |
참고 : 헤롱이 - 안드로이드(android) ListView + ArrayAdapter
ListView 에서 스크롤 이벤트 발생 시 데이터 추가 부분을 구현해 봄.
하단으로 스크롤하면 데이터를 요청하고 새로 받아온 데이터를 Adapter의 ArrayList 에 추가한다.
그리고 ListView에 반영된 데이터를 업데이트하여 보여준다.
Activity 부분
boolean lastitemVisibleFlag = false;
ArrayList<Item> arr_listItems;
private void Init_ListView(){
arr_listItems = new ArrayList<>();
lv_accomodation = (ListView)findViewById(R.id.lv_accomodation);
adapter = new AccomAdapter(this, arr_listItems);
lv_accomodation.setAdapter(adapter);
lv_accomodation.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && lastitemVisibleFlag) {
// 데이터 로드
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
lastitemVisibleFlag = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount);
}
});
}
onScrollStateChanged 는 스크롤 상태변경 시 발생하는 이벤트이다. 스크롤 상태가 마지막 아이템이 보일때 if문을 만족한다.
if 문 안에는 데이터를 로드하는 부분을 구현하면 됨.
onScroll 은 스크롤 상태를 받아오는 이벤트이다.
여기서는 현재 스크롤의 상태가 마지막 아이템이 보이는지 유무를 판별한다.
private void setData(){
if(listItem.getItems().size() != 0){
for(int i = 0 ; i < listItem.getItems().size() ; i++){
arr_listItems.add(listItem.getItems().get(i));
}
}
this.runOnUiThread(updateUI);
}private Runnable updateUI = new Runnable() {
public void run() {
MainActivity.this.adapter.notifyDataSetChanged();
}
};
Activity 에 있는 ArrayList에 받아온 데이터를 추가시켜주고 업데이트 시켜준다.
실시간으로 업데이트를 시켜주려면 Runnable로 해줘야 반영이 된다고 한다.
'Programming > Android' 카테고리의 다른 글
[Android] WebView 멀티터치, 확대 축소, 줌 설정 (0) | 2016.08.10 |
---|---|
[Android]strings.xml 에서 특수문자 사용하기 (0) | 2016.08.10 |
[Android] 메모리 최적화 (0) | 2016.07.18 |
[Android] 이미지 용량 줄이기 (0) | 2016.07.18 |
[Android] 시스템 설정으로 이동하기 (0) | 2016.07.13 |