Android - ListView - 按需调用 getView()

标签 android android-layout android-intent android-emulator android-widget

我有一个 ListView,它在每一行中显示从互联网上提取的图像和一个字符串。

总的来说,它工作正常。但是,我想在 View (行)膨胀时控制方式。默认情况下,当行可见时,调用适配器的 getView() 方法。

这当然不是最好的行为之一,因为如果我有一个包含数百条记录的 ListView,我需要在滚动 ListView 时到达底部的那些 时,将为每一行调用 getView() 方法,直到到达页脚。

所以我只想在滚动后调用 getView 并且 ListView 处于暂停/空闲状态,但我不知道如何去做:

我是这样开始的:

listView.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if(scrollState==SCROLL_STATE_IDLE){
            // Invoke get view only on visible items
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {

    }
});

这是我的适配器的 getView:

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

    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.row, parent, false);

        holder = new ViewHolder();
        holder.title = (TextView) convertView.findViewById(R.id.textView);
        holder.image = (ImageView) convertView.findViewById(R.id.imageView);
        holder.position = position;

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }


    holder.title.setText(data.get(position).getTitle());
    holder.image.setImageResource(R.drawable.ic_launcher);
    new LoadImageAsync(data.get(position).getUrl(), holder.image).execute();

    return convertView;
}

请给我一些指示,告诉我应该在哪里查看以实现此目的:仅在滚动后调用 getView(),并且仅针对可见项目。

最佳答案

我最近读了一篇关于这个的文章... here .我没有尝试过,但这似乎是一个合理的理论。

基本上,他们提倡添加一个 bool 值,用于跟踪您是否正在滚动,并将其用作适配器中的标志。如果 bool 值为真(您正在滚动),则仅在您的布局中绘制 TextView 。如果为 false(您已停止滚动),则绘制所有内容。

您使用 notifyDataSetChanged() 告诉适配器在不滚动时重绘可见 View 。

关于Android - ListView - 按需调用 getView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847387/

相关文章:

安卓 Intent 数据库

Android:运行 ActionBarSherlock-Plugin-Maps 时出现 ClassNotFoundException

java - UnknownHostException 安卓客户端套接字

android - 什么是/storage/emulated/0/?

java - 在工具栏中找不到 textView id

android - getBooleanExtra() 仅使用默认参数而不是 putExtra() 传递的参数

android - 在 Marshmallow 中使用 GridLayoutManager 处理 Android recyclerview 时遇到问题

Android 布局 nullpointerException

java - 更改圆弧半径

android - 如何显示安装在 Android 设备上的应用商店列表?