当前位置: 首页 > 知识库问答 >
问题:

Android ListView“recycle”不存储最初不可见的行

陈泰宁
2023-03-14

网上可能有数千篇关于ListView和ListAdapter回收过程的帖子,但到目前为止我还不能解决我的问题。

我有自定义的ListView行,并使用从远程服务器获取的数据填充行中的项目(TextView、ImageView等)。屏幕一次最多可以显示5行,如果有更多行,我必须滚动。问题是;适配器只存储和回收前5行的信息,即使我滚动查看第6行、第7行、第8行等,我也会在随机位置一次又一次地看到相同的5行。

以下是代码:

public class ListAdapter extends BaseAdapter {

    private ArrayList<String> id, name, address;
    private Context context;

    public ListAdapter(Context c, ArrayList<String> id,
            ArrayList<String> name, ArrayList<String> address,) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.context = c;
    }

    @Override
    public int getCount() {
        return id.size();
    }

    @Override
    public Object getItem(int position) {
        return id.get(position);
    }

    @Override
    public long getItemId(int id) {
        return id;
    }

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

        if (convertView == null) {
            rowsLayout = (View)LayoutInflater.from(context)
                           .inflate(R.layout.list_item, null);
            //Assign values to TextViews in here
        } else {
            rowsLayout = convertView;
        }
            return rowsLayout;
    }
}

我尝试使用这个网站中的方法,但没有帮助。

如果有人能给我提供一个解决方案(请提供代码)或指导我到另一个职位,我将不胜感激。

共有1个答案

洪开济
2023-03-14

从这里更改您的代码:

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

    if (convertView == null) {
        rowsLayout = (View)LayoutInflater.from(context)
                       .inflate(R.layout.servisler_list_item, null);
        //Assign values to TextViews in here
    } else {
        rowsLayout = convertView;
    }
        return servisRowsLayout;
}

为此:

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

    if (convertView == null) {
        rowsLayout = (View)LayoutInflater.from(context)
                       .inflate(R.layout.servisler_list_item, null);
    } else {
        rowsLayout = convertView;
    }

        //Assign values to TextViews in here

        return servisRowsLayout;
}

您需要在每个getView()调用上为TextViews分配值,而不仅仅是其中的一些。

 类似资料:
  • 我如何更改我的PDF文件,使这些值在Adobe Reader启动时可见,以及在PDF Reader(只支持AcroForms而不支持XFA)中可见?

  • 当您在Matplotlib的Savefig()函数中设置bbox_inches=“紧密”时,它会尝试找到封装图形窗口中所有内容的最紧密边界框。不幸的是,最严格的边界框似乎包括不可见的轴。 例如,下面是一个代码段,其中设置bbox_inches='tight'可以根据需要工作: 产生: 保存的pdf的边界与内容的边界相对应。这很好,只是我喜欢使用一组不可见的图形轴来放置注释。如果不可见轴超出可见内容

  • 问题内容: 我正在尝试在中创建函数并从中创建实例。问题是我在文件中看不到它,并且在初始化时找不到该函数。我有一个定义如下的函数: 我什至尝试放入推杆,但再次出现相同的错误。还有什么我想念的吗?如何使构造函数对代码可见? 我为此阅读以下内容: https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_pr

  • 我有三个活动,每个都有一个按钮。Act1与btn1,Act2与btn2,Act3与btn3。我有另一个活动作为主活动,有三个图像视图:ImageView1、imageView2和imageView3,所有这些最初都是不可见的。我希望这样,当我在act1中单击btn1时,MainActivity中的imageView1将可见,而当再次单击btn1,ImageView 1将再次不可见。与imageVi

  • 下面是我的代码。当我从excel中输入url时,大部分时间都显示org . open QA . selenium . elementnotvisibleexception:元素当前不可见错误。对于像www.travelocity.com这样的网站,它显示点击7 8链接后,但www.google.com显示错误从开始。 线程"main"org.openqa.selenium.ElementNotVi

  • 有隐形字符吗?我在Google上查看了隐形字符,最终得到了许多答案,但我不确定这些答案。Stack Overflow上的人能告诉我更多关于这方面的信息吗? 我还检查了脸书的个人资料,发现这个用户的个人资料上没有任何名字?这怎么可能?是数据库的问题吗?黑客之类的? 当我在网上搜索时,我发现< code>200D是一个带有隐形字符的ASCII值。是真的吗?