gpt4 book ai didi

java - 滚动时 ListView 中的项目顺序错误

转载 作者:行者123 更新时间:2023-12-01 12:23:39 26 4
gpt4 key购买 nike

我的布局如下所示:

enter image description here

在 ListView 中有几个自定义 View 。项目根据其索引显示。

我使用这个代码:

@Override
public int getItemViewType(int position) {
return UL.separators.contains(position) ? 1 : 0;
}

这是 getView 函数:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

NewsHolder holder = null;
View row = convertView;
holder = null;
int type = getItemViewType(position);
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();

holder = new NewsHolder();

switch (type) {
case 1:

row= inflater.inflate(R.layout.section_header, null);
holder.itemName = (TextView)row.findViewById(R.id.header);
holder.itemName.setText("CUSTOM TEXT");
row.setTag(holder);
break;
case 0:
row= inflater.inflate(R.layout.custom_row, null);

holder.itemName = (TextView)row.findViewById(R.id.example_itemname);
holder.icon=(ImageView)row.findViewById(R.id.example_image);
holder.button3=(Button)row.findViewById(R.id.swipe_button3);
row.setTag(holder);
ItemRow itemdata = data.get(position);
holder.itemName.setText(itemdata.getItemName());
holder.icon.setImageDrawable(itemdata.getIcon());

break;
}

}
else
{
holder = (NewsHolder)row.getTag();
}

return row;

但是当我滚动 ListView 时,元素是随机排列的,如下面的屏幕截图所示。

滚动之前:

enter image description here

滚动后:

enter image description here

最佳答案

试试这个

@Override
public View getView(int position, View convertView, ViewGroup parent) {

NewsHolder holder = null;
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
int type = getItemViewType(position);

switch (type) {
case 1: {
holder = new NewsHolder();
if (convertView == null || (((NewsHolder) convertView.getTag()).getType() == 0)) {
convertView = inflater.inflate(R.layout.section_header, null);
holder.itemName = (TextView) convertView.findViewById(R.id.header);
holder.setType(1);
convertView.setTag(holder);
} else {
holder = (NewsHolder) convertView.getTag();
}
holder.itemName.setText("CUSTOM TEXT");

break;
}
case 0: {
holder = new NewsHolder();
if (convertView == null || (((NewsHolder) convertView.getTag()).getType() == 1)) {
convertView = inflater.inflate(R.layout.custom_row, null);
holder.itemName = (TextView) convertView.findViewById(R.id.example_itemname);
holder.icon = (ImageView) convertView.findViewById(R.id.example_image);
holder.button3 = (Button) convertView.findViewById(R.id.swipe_button3);
holder.setType(0);
convertView.setTag(holder);
} else {
holder = (NewsHolder) convertView.getTag();
}
ItemRow itemdata = data.get(position);
holder.itemName.setText(itemdata.getItemName());
holder.icon.setImageDrawable(itemdata.getIcon());

break;
}
}


return convertView;
}

然后将其添加到您的 NewsHolder 类中

 private class NewsHolder {

private int holderType;

public void setType(int holderType){
this.holderType=holderType;
}
public int getType(){
return this.holderType;
}

// YOUR VARIABLES (VIEWS)
// --
// ВАШИ ПЕРЕМЕННЫЕ ВЬЮ
}

关于java - 滚动时 ListView 中的项目顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com