ListView와 함께 ArrayAdpater를 사용하고 있습니다. 최상위 뷰 계층 구조 인 RelativeLayout
->LinearLayout
-> 다른 내부보기를 포함하는 자체 레이아웃으로 각 항목을 사용자 정의했습니다.문제 설정보기 홀더 패턴의 매개 변수보기
보기를 재사용 중이며보기 홀더 패턴을 사용하고 있습니다. 내 getView()
어댑터는 내부 :
public static class ViewHolder{
TextView tvMessage;
TextView tvUser;
LinearLayout llMessageBubble;
}
및 setRow 방법은 다음과 같이 정의된다
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
ViewHolder holder;
if(rowView == null){
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.custom_row, parent, false);
holder = new ViewHolder();
holder.tvMessage = (TextView)rowView.findViewById(R.id.chat_text_message);
holder.tvUser = (TextView)rowView.findViewById(R.id.user);
holder.llMessageBubble = (LinearLayout)rowView.findViewById(R.id.message_bubble);
rowView.setTag(holder);
}else {
holder = (ViewHolder) rowView.getTag();
}
setRow(holder, messageList.get(position).getUser(),messageList.get(position).getTextMessage());
return rowView;
}
: ListView에가 처음으로 표시됩니다
private void setRow(ViewHolder holder, String user, String message){
if(user.equals("Me")){
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.llMessageBubble.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.llMessageBubble.setLayoutParams(params);
}else{
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.llMessageBubble.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
holder.llMessageBubble.setLayoutParams(params);
}
holder.tvMessage.setText(message);
holder.tvUser.setText(user);
}
은, 모든 좋은 작품, 그래서 LinearLayout (RelativeLayout 내부)이 문자열 사용자를 기준으로 왼쪽 또는 오른쪽으로 정렬 된 것을 볼 수 있습니다. 잠시 위아래로 스크롤하면 뭔가 잘못 될 수 있습니다. 특정 기간이 지나면 LinearLayout
은 모두 부모의 오른쪽에 정렬됩니다. 재활용에 문제가있는 것 같습니다.
그것은보기 홀더 패턴없이 작동합니까? – pskink
방금 시도했지만 NO,보기없이 작동하지 않습니다 홀더 패턴 – GVillani82