所以我试图使用以下代码为我的第一个ListItem元素设置不同的布局资源:
int type;
@Override
public int getItemViewType(int position) {
if(position==0) {
type = R.layout.queue_item_next;
} else {
type = R.layout.queue_item;
}
return type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
}
但是这段代码有一些意想不到的行为。由于某种原因,ListView的最后一个元素也被设置为具有这种替代布局,我不知道为什么。
可能导致这种情况发生的原因是什么?
感谢。
答案 0 :(得分:2)
问题即将发生,因为getItemViewType()返回的值大于视图类型的数量。您可以使用以下代码对我来说完美无缺。
@Override
public int getItemViewType(int position) {
if(position==0) {
return 0;
}
return 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int type = getItemViewType(position);
if(type == 0)
convertView = (View) inflater.inflate(R.layout.first_layout, parent, false);
else
convertView = (View) inflater.inflate(R.layout.second_layout, parent, false);
}
}
注意:如果只有第一个视图不同,那么最好的选择是使用函数listview.addHeaderView()函数使用headerView link
答案 1 :(得分:0)
因为您正在使用if(convertView == null) {}
这意味着如果以前的视图在内存中可用,则其他人创建一个新视图。因此,有时滚动快/慢取决于手机的可用资源,它会有所不同。
要解决此问题,请不要检查if(convertView == null)
像这样使用
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
}