【发布时间】:2017-03-09 21:14:29
【问题描述】:
我正在尝试创建一个简单的聊天/消息布局。我的问题是适配器。我想使用两种不同的布局。一个用于传出消息,一个用于传入消息。此外,我想使用 ViewHolder 方法。但是我的实现会导致每次 getView 运行时都会膨胀/重用相同的布局。
谁能解释一下为什么会这样?我需要使用两个视图吗?
相关代码如下所示
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int direction = getItemViewType(position);
ViewHolder holder;
if (convertView == null) {
int res = 0;
int resid = 0;
holder = new ViewHolder();
if (direction == DIRECTION_INCOMING) {
holder = new ViewHolder();
res = R.layout.message_l_box;
resid = R.id.left_bubble_text;
}
else {
res = R.layout.message_r_box;
resid = R.id.right_bubble_text;
}
convertView = LayoutInflater.from(mContext).inflate(res, parent, false);
holder.text = (TextView) convertView.findViewById(resid);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(getItem(position).first);
return convertView;
}
// Ensure that find by id is not called every time -> could cause slow scrolling
private class ViewHolder {
TextView text;
}
【问题讨论】:
-
你对
getItemViewType()的实现是什么? -
我正在使用 List
> 并且实现是: public int getItemViewType(int i) { return dialog.get(i).second; } -
您是否使用调试器跟踪您的代码?你确定
getItemViewType()会返回你期望的结果吗?
标签: java android listview android-adapter