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

标签 java android eclipse listview scroll

我的布局如下所示:

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/

相关文章:

java - JDBC——列函数的结果集值

java - 在 Solr 中的单个字段上启用小写搜索和 docValues

java - Jersey 资源类未导出

java - 将 Jersey 和 Apache Tomcat 用于 Web Api 时出现 404 错误

java - entityManager.createNativeQuery 不返回类型化结果

Java 实现一个可运行的 FPS 系统

android - 基于子级的 Firebase 排序数据不工作

android - 更新后的 Gradle 错误 : com. android.tools:sdk-common

java - 是否可以在 onCreate() 函数中创建不一致的数据?

python - Python 中的 for 循环丢失重音符号