我正在使用ListView和BaseAdapter来填充里面的列表项。我只是在右侧制作一个简单的聊天应用程序自己的消息显示,并在左侧显示朋友消息。
问题是,当我滚动列表查看上部项目时,其他人会感到不安,就像某个地方自己的msg位于右侧而某些地方位于左侧。
滚动前
Friend
Me
Friend
Me
Friend
Me
滚动后
Friend
Me
Friend
Me
Friend
Me
Friend
Me
这是我的BaseAdapter代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
if (names.get(position).equals(own)){
rowView = inflater.inflate(R.layout.list_item_chat_message_own,
null);}
else{
rowView = inflater.inflate(
R.layout.list_item_chat_message_contact, null);
}
ViewHolder viewHolder = new ViewHolder();
viewHolder.name = (TextView) rowView.findViewById(R.id.name);
viewHolder.message=(TextView) rowView.findViewById(R.id.firstLine);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
String name = names.get(position);
String message = messages.get(position);
//Log.e("name", own+"-"+name);
//Log.e("message", message);
holder.message.setTextColor(context.getResources().getColor(this.getTextColorID()));
if(name.equals(own))
holder.name.setText("Me");
else
holder.name.setText(name);
holder.message.setText(message);
return rowView;
}
@Override
public int getCount() {
return names.size();
}
@Override
public Object getItem(int position) {
return names.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
答案 0 :(得分:5)
您必须在适配器中实施getItemViewType(position)
和getViewTypeCount
方法。
他们中的第一个告诉适配器需要在给定位置使用哪种类型的行,第二个告诉适配器需要使用多少行类型
<强>更新强>
会是这样的:
@Override
public int getViewTypeCount() {
// you have two different row types
return 2;
}
@Override
public int getItemViewType(int position) {
// You need to tell to adapter which row is needed at given position
return names.get(position).equals(own) ? 0 : 1;
}
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
if (getItemViewType(position) == 0){
rowView = inflater.inflate(R.layout.list_item_chat_message_own,
null);}
else{
rowView = inflater.inflate(
R.layout.list_item_chat_message_contact, null);
}
// rest of your code
}
//rest of your code
}