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

리스트뷰 채팅 도와주세요 ㅠㅠ

0 추천
리스트뷰에 row.xml 하나 올려서 채팅 구현중입니다.

그런데 한쪽방향에서 보낼땐 보내는쪽도 정상이고 받는쪽도 순서대로 리스트뷰에 쌓이면서

보내는건 오른쪽 받는건 왼쪽 이렇게 쌓입니다. row.xml 에서 리니어 레이아웃으로 받는쪽 보내는쪽 나눠서

visible invisible 로 처리했구요  근데 문제가 생기는 시점이 받던쪽에서 보내면 위에 visible invisible 마구 섞입니다.

보이면 안되는쪽이 보이고 스크롤로 위아래 와따가따 해도 섞입니다 ... 이거 어디서 처리를 해줘야 하는지 감이 안옵니다

도와주세요 ㅠㅠ  제가 생각하고 있는 이론이 잘못된거겠죠 위에 리스트뷰에 한번 정의된게 왜 변경 되는지 모르겠습니다.

ㅜㅜ
숀화이트 (3,310 포인트) 님이 2014년 3월 4일 질문

2개의 답변

+1 추천

mylayout, ulayout 을 맴버변수로 지정하시거 같은데 지역 변수로 바꾸시고,

mylayout, ulayout도 holder에서 관리되도록 변경하셔야 합니다.

holder.mylayout, holder.ulayout 식으로 참조할 수 있도록이요.

코딩인헬 (12,150 포인트) 님이 2014년 3월 4일 답변
말씀대로 바꿧더니 이제 ... 대화가 한쪽으로 와따가따 하네요;;;
========원하는화면===============
a: 안녕
                                      b: 안녕
a: 반가워
=============현재 화면 b================
a:안녕
b:안녕
a:반가워
=========a화면==========
                                     a:안녕
                                     b:안녕
                                     a:반가워
==============================
자기가 말하면 우측으로 다 넘어오고
받을땐 좌측으로 다 넘어오네요 ... 흠...

뷰로 뿌릴때 겟뷰안에 있는 데이터를 통째로 한쪽의  id로 바꾸는가보네요  이걸 우찌 해야 하지 ㅠㅠ
if (id.equals(txt[0])) {
위 구문에서 txt 배열이 뭘 뜻하는지 모르겠지만
txt의 0번째 배열이 항상 같은 값이라 한쪽으로만 오는거 같습니다.
정말 감사합니다 ㅎㅎ 이글 보기전에 확인하고 수정했습니다 ..

바보같이 코딩을 해놨엇네요 ...
0 추천
아무래도 뷰를 재사용하기 때문에 발생하는 문제 같네요 재사용하지 않고 한번 해보시기 바랍니다.
Gradler (109,780 포인트) 님이 2014년 3월 4일 답변
@Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            String posi = Integer.toString(position);
            Log.d("position",posi);
    Holder holder = new Holder();
    if (convertView == null) {
        convertView = mLayoutInflater.inflate(R.layout.item_row, null);
        mylayout = (LinearLayout)convertView.findViewById(R.id.mylayout);
        ulayout = (LinearLayout)convertView.findViewById(R.id.ulayout);
        // find resource
                    
        holder.tv_title = (TextView) convertView
                .findViewById(R.id.tv_title);
        holder.tv_Utitle = (TextView) convertView
                .findViewById(R.id.tv_Utitle);
        convertView.setTag(holder);

    } else {
        holder = (Holder) convertView.getTag();
    }

    // set content
    String title = mExamItemArrayList.get(position).title;
   
    if (id.equals(txt[0])) {
        Log.d("11111111111111tv1111111111111",title);
    mylayout.setVisibility(View.VISIBLE);
    ulayout.setVisibility(View.INVISIBLE);
    holder.tv_title.setText(title);
    holder.tv_Utitle.setText(title);
   
    }else{
        Log.d("222222222222222tv222222222222",title);
    mylayout.setVisibility(View.INVISIBLE);
    ulayout.setVisibility(View.VISIBLE);
    holder.tv_title.setText(title);
    holder.tv_Utitle.setText(title);
    }
    // set click listener
    holder.tv_title.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(mContext,
                    mExamItemArrayList.get(position).title,
                    Toast.LENGTH_SHORT).show();
        }
    });
    holder.tv_Utitle.setOnClickListener(new OnClickListener() {
       
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext,
                    mExamItemArrayList.get(position).title,
                    Toast.LENGTH_SHORT).show();
        }
    });
    return convertView;
}

이해를 잘 못하겠어요 ㅠㅠ 이부분이 겟뷰 부분인데 잘못된 부분을 모르겠어요 ㅠㅠㅠㅠ
...