android – ListView在ArrayAdapter顺序get的混合起来时滚动

我在自定义ArrayAdapter中有一个ListView,在每一行中显示一个图标ImageView和一个TextView。当我使列表长到足以让你滚动通过它,顺序开始正确,但当我开始向下滚动,一些较早的条目开始重新出现。如果我向上滚动,旧订单会更改。重复这样做最终导致整个列表顺序看起来是随机的。因此,滚动列表会导致子订单更改,或者图形无法正确刷新。

什么可能导致这样的事情发生?我需要将项目显示给用户的顺序与添加到ArrayList的顺序相同,或者至少保留在一个静态顺序中。如果我需要提供更详细的信息,请让我知道。任何帮助是赞赏。谢谢。

我遇到了类似的问题,但是当点击自定义列表中的项目时,屏幕上的项目会按顺序颠倒。如果我再次点击,他们会反向回到他们原来的地方。

阅读完之后,我检查了我的代码,我重载了getView方法。我从convertedView获取视图,如果它为null,那是我将构建我的东西。但是,放置断点后,我发现它是在每次点击和后续点击调用此方法,convertedView不为null,因此项目没有被设置。

这里是一个例子:


public View getView(int position, View convertView, ViewGroup parent)
{
    View view = convertView;
    if (view == null)
    {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = vi.inflate(R.layout.listitemrow, null);

        RssItem rssItem = (RssItem) super.getItem(position);
        if (rssItem != null)
        {
            TextView title = (TextView) view.findViewById(R.id.rowtitle);
            if (title != null)
            {
                title.setText(rssItem.getTitle());
            }
        }
    }
    return view;
}

微妙的变化正在移动关闭大括号的视图上的空检查刚刚后充气:


public View getView(int position, View convertView, ViewGroup parent)
{
    View view = convertView;
    if (view == null)
    {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = vi.inflate(R.layout.listitemrow, null);
    }
    RssItem rssItem = (RssItem) super.getItem(position);
    if (rssItem != null)
    {
        TextView title = (TextView) view.findViewById(R.id.rowtitle);
        if (title != null)
        {
            title.setText(rssItem.getTitle());
        }
    }
    return view;
}

我希望这可以帮助经历同样问题的人。

http://stackoverflow.com/questions/2955218/listview-in-arrayadapter-order-gets-mixed-up-when-scrolling

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – ListView在ArrayAdapter顺序get的混合起来时滚动