마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

custom listview 리줌

0 추천
커스텀리스트뷰관련 질문입니다.

리줌에서 setadapter 를 하고있는데

 

if문으로 리스트가 변경사항이 없으면 setadapter를 유지 하고싶습니다.

 

그런데 변경사항이 없을때 setadapter가 안타니까 listvie가 모두 텅 비어버리네요.

 

무조건 setadapter를 사용해야하나요 ?? 변경사항없으면 그대로 유지할수있게 할수있을까요 ?

 

setadapter를 실행하면 bindview가 실행되서 좀 느려지네요.

 

listview 항목이 변경없으면 이전화면을 그대로 유지하는 방법 알려주세요.
now882002 (3,860 포인트) 님이 2015년 2월 3일 질문

2개의 답변

+1 추천
 
채택된 답변

onResume에서 setAdapter를 하는 이유가 있으신가요?

adapter를 매번 재 선언 하는것도 이상하고...

 

일단 이렇게 해보세요.

public void onResume() {

        super.onResume();
        if (flag) {
            adapter = new customAdapter(ActivityContext,
                    R.layout.favorites_griditem, getUser());

            userlist.setAdapter(adapter);
         }else{

          if(adapter != null)             

                adapter.notifyDataSetChanged();

        }

}

이드로이드 (22,930 포인트) 님이 2015년 2월 3일 답변
now882002님이 2015년 2월 3일 채택됨
getUser()요 부분에서 가져오는 List를 전역 변수에 선언해서 저장하시고,
adapter는 onCreate에서 한번만 선언하는걸로 바꾸세요,
이후에 ListView에 값을 변경하고 적용하고 싶으실때는
전역에 선언하신 List를 수정하신 후에
adapter.notifyDataSetChanged();
만 호출해 주시면 됩니다.
변경된 값을 listview에 적용하기 위해서 setAdapter을 매번 호출 하실 필요는 없어고, 그렇게 하시면 포퍼먼스도 떨어지고, 여러모로 안좋아요.
감사합니다! 이게 정답인것같아요 ㅎㅎ
추천합니다.
0 추천
아무것도 안하면 그대로 유지되는게 정상입니다.

다른 부분에 문제가 있어보입니다.
익명사용자 님이 2015년 2월 3일 답변
public void onResume() {
        super.onResume();
        if (flag) {
            adapter = new customAdapter(ActivityContext,
                    R.layout.favorites_griditem, getUser());
                    }
        userlist.setAdapter(adapter);
}
코드는 이것뿐인데... 잘못된게 있나요 ???
이상하네요
flag값이 각 상황에 따라 올바르게 설정되어 있는지 확인하시고,
flag가 false일 때 setAdapter를 하지 않도록 수정하세요.
flag 가 true 일때만 setadapter 하게 하면 false일때는 list가 비어버립니다 ㅠ
아무것도 안나와요 ㅠㅠ
...