안드로이드 개발 질문/답변
(글 수 48)
밑에 밑에 질문 올렸던 사람인데요,,,
밑에 글에 마저 글을 이어 붙이자면,
newVIew() 메서드에서 View 자체를 리턴한 다음에 bindView() 에서 거기있는 VIew 객체에서 TextView들을 찾아 텍스트들을 뿌려주는거라서
bindView()에서 조건을 걸어서 레이아웃 자체를 바꿀 수 없다는걸 알았습니다 ㅜ ㅜ
이렇게 생각하는게 잘못된건지도,,, 맞는건지도 사실 잘 모르겠지만...
그래서 질문을 바꿔 올리려고 합니다.
제가 채팅 어플을 만들어 보려고 하는데,
채팅 리스트가 listView로 되어 있고, DB에 있는 정보를 뿌려주는 어댑터로는 CursorAdapter를 이용했습니다.
레이아웃은, 상대방이 말하는 때와 제가 말하는 때를 두가지 xml로 작업해둿구요.
DB에서 말한 사람을 찾아서 , 그게 나라면 내가말한 레이아웃을. 그게 상대방이라면 상대방의 레이아웃을 보여주고 싶습니다.
그래서 지금 문제되는 것이, newView()에서.. View를 한번 리턴하고 끝나고 리스트에 뿌려주는건 bindView()가 하기 때문에...
중간에 View값을 바꿀 수 없다는 것입니다.ㅜ ㅜ ( 쓰면서 이게 맞는 소린지도 잘 모르겠어요 )
그래서 결론적으로 질문드리는 것이... 두가지의 레이아웃을 가진 xml 이 있고, CursorAdapter를 이용해서
레이아웃이 상황에 따라 바뀌면서 리스트뷰가 뿌려지려면 어떻게 해야 하나요... ( 카카오톡 같이 )
ㅜ ㅜ 흐긍흐긍
내가 살면서 자답을 달게 되다니 ㅜ ㅜ 무한 감동 감격, ㅋㅋㅋㅋㅋㅋㅋ
아... 어떻게 해결했냐면요 !
두개 레이아웃을 하나로 합쳐서. 프레임 레이아웃으로 만들었어요.
두개 레이아웃이 겹치도록 !
그리고 ~ visible, invisible 을 줘서 ㅜ ㅜ 했더니 잘 되네요. 너무 행복해요.
혹시나 누가 이걸 보면 참고 할 수 있도록 소스도 !!!!
// newView는 새로운 View 추가시에 어떤 layout을 구성할 것인지 결정
public View newView ( Context context, Cursor cursor, ViewGroup parent ) {
inflater = LayoutInflater.from ( context );
this.parent = parent;
view = inflater.inflate ( R.layout.talk_layout, parent, false );
return view;
}
// 데이터 셋 하나 하나를 처리하는 것을 결정
public void bindView ( View view, Context context, Cursor cursor ) {
// 메시지 처리
String msg = cursor.getString ( cursor.getColumnIndex ( Constants.TABLE_CONVERSATION_FIELD_MSG ) );
// 날짜 처리
Date temp = new Date ( cursor.getLong ( cursor.getColumnIndex ( Constants.TABLE_CONVERSATION_FIELD_DATE ) ) );
String date = df.format ( temp.getTime () );
// 말하는 인간 누군
who = cursor.getString ( cursor.getColumnIndex ( Constants.TABLE_CONVERSATION_FIELD_FROM ) );
ll1 = (LinearLayout) view.findViewById ( R.id.i_talk );
ll2 = (LinearLayout) view.findViewById ( R.id.friend_talk );
if ( who.equals ( "me" ) ) {
ll1.setVisibility ( View.VISIBLE );
ll2.setVisibility ( View.INVISIBLE );
textSay1 = (TextView) view.findViewById ( R.id.i_says );
textDate1 = (TextView) view.findViewById ( R.id.i_date );
textSay1.setText ( msg );
textDate1.setText ( date );
} else {
ll2.setVisibility ( View.VISIBLE );
ll1.setVisibility ( View.INVISIBLE );
textSay2 = (TextView) view.findViewById ( R.id.friend_says );
textDate2 = (TextView) view.findViewById ( R.id.friend_date );
textSay2.setText ( msg );
textDate2.setText ( date );
}
Log.v ( MY_TAG, "who ? : " + who );
}
}