我试图通过检查getView
中的所有ArrayList项来更改列表视图中的行。如果item.getSend_status()
为-1
,则convertView必须为layout_message_content_list_rtl
,否则为layout_message_content_list_ltr
。
在我的getView
中写道,但滚动列表视图else
之后无法正常工作且所有项目仅layout_message_content_list_ltr
充气,例如,如果我在{{1}中有两个项目作为这个结构:
ArrayList
第一项public class RowItems{
int send_status;
String title;
}
中的是send_status
,第二项是-1
,我的列表视图必须有不同的项目,但是这些项目工作不正常,我只在listview中进行膨胀< / p>
1
logcat的:
此结果适用于@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mViewHolder;
MessagesList item = getItem(position);
if (convertView == null) {
if (item.getSend_status() == -1) {
convertView = inflater.inflate(R.layout.layout_message_content_list_rtl, null);
} else{
convertView = inflater.inflate(R.layout.layout_message_content_list_ltr, null);
}
mViewHolder = new ViewHolder(convertView);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
mViewHolder.fillItems(this, item, position);
return convertView;
}
Log.e("Send_status: ",item.getSend_status()+"");
:
fillItems
答案 0 :(得分:1)
这不会起作用,是预期的行为。我们应该首先了解convertView
代表什么!
为了重新使用视图,android将已经膨胀的视口外位置视图回收到名为convertView
的getView()方法。对于同类列表(单一类型的布局),这可以很好地完成,因为convertView
将具有与新视图相同的布局。所以android说,&#34;嘿,视图已经膨胀,接受它!只需使用该位置的数据更新其中的项目!&#34;
现在如果你有两种类型的布局怎么办?不用担心,这适用于Adapter的架构!
您需要在适配器代码中覆盖以下两种方法:
@Override
public int getViewTypeCount() {
return 2; //Number of different layouts in the list. "rtl" and "ltr" = 2 in your case.
}
@Override
public int getItemViewType(int position) {
MessagesList item = getItem(position);
if (item.getSend_status() == -1) {
return 0; // for rtl
}
else {
return 1; // for ltr
}
//The return value must be less than the view type count
}
现在,在您的getView()
方法中,执行以下操作:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mViewHolder;
MessagesList item = getItem(position);
View newView = convertView;
if (newView == null) {
if (getItemViewType(position)==0) {
newView = inflater.inflate(R.layout.layout_message_content_list_rtl, parent, false);
} else {
newView = inflater.inflate(R.layout.layout_message_content_list_ltr, parent, false);
}
mViewHolder = new ViewHolder(newView);
newView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) newView.getTag();
}
mViewHolder.fillItems(this, item, position);
return newView;
}