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

리스트뷰 어뎁터좀 알려주세요..

0 추천
안녕하세요

 

activity에서 set 시켜주는 adapter가 있잖아요

 

이제 adapter에서 arrayadpater를 상속받아 getView를 기술하고

 

getView 안에다가 제가 조건문을 사용해서

어떤 상황일 때 마다 리스트 행에 있는 글씨 색이나 이미지를 바꿀라고 코딩을 했어요

 

근데 이게 적용은 되는데 스크롤 이동 할 때 마다

오락가락합니다..

 

색이 이게바꼈다가 저게바꼈다가... 이유좀 아시면 알려주세요..
윤둥이 (4,560 포인트) 님이 2013년 6월 24일 질문

2개의 답변

0 추천
getView에서 convertView를 재탕하면서 문제가 생긴것 같은데요.

ViewHolder도 사용해보시고 해보세요
q1212 (26,020 포인트) 님이 2013년 6월 24일 답변
@Override
    public View getView(int position, View convertview, ViewGroup parent) {

        if (convertview == null) {
            viewHolder = new ViewHolder();
            convertview = inflater.inflate(resourceId, null);
            viewHolder.deviceName = (TextView) convertview.findViewById(R.id.talker_name);
            viewHolder.state = (TextView) convertview.findViewById(R.id.state);
            viewHolder.image = (ImageView) convertview.findViewById(R.id.image);
            viewHolder.callButton = (ImageView) convertview.findViewById(R.id.call_button);
            viewHolder.messageButton = (ImageView) convertview.findViewById(R.id.message_button);
            viewHolder.whisperButton = (Button) convertview.findViewById(R.id.whisper_button);
           
            convertview.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertview.getTag();
        }

        viewHolder.deviceName.setText(getItem(position).getDeviceName());

        viewHolder.image.setOnClickListener(buttonClickListener);
        viewHolder.image.setTag(position);

        viewHolder.callButton.setOnClickListener(buttonClickListener);
        viewHolder.callButton.setTag(position);

        viewHolder.messageButton.setOnClickListener(buttonClickListener);
        viewHolder.messageButton.setTag(position);

        viewHolder.whisperButton.setOnClickListener(buttonClickListener);
        viewHolder.messageButton.setTag(position);
       
        if (getItem(position).getState() == 0) {
            viewHolder.state.setText("미접속");
            viewHolder.image.setImageResource(com.btb.pump.pvt.R.drawable.icon_voice_nor);
        }
        else if (getItem(position).getState() == 1) {
            viewHolder.state.setText("접속중");
            viewHolder.state.setTextColor(0xFFFFFFFF);
        }

        return convertview;
    }

코드입니다..

마지막 if문이 그부분인데 viewHolder를 사용한거 아닌가요?
getView아래에
ViewHolder viewHolder;
추가해보세요
0 추천

소스를 봐야 알겠지만

if(convertView==null) {
     //convertView할당
     //색깔 적용
}

이렇게 처리하신 것 같습니다.

색깔적용은 if문 안이 아닌 밖에서 해주셔야 합니다.(항상 적용될 수 잇도록)

BigStarK (540 포인트) 님이 2013년 6월 24일 답변
...