Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-ListView-按需调用getView()_Android_Android Layout_Android Intent_Android Emulator_Android Widget - Fatal编程技术网

Android-ListView-按需调用getView()

Android-ListView-按需调用getView(),android,android-layout,android-intent,android-emulator,android-widget,Android,Android Layout,Android Intent,Android Emulator,Android Widget,我有一个列表视图,它在每一行显示一个从互联网上提取的图像和一个字符串 一般来说,它工作得很好。但是,当视图(行)膨胀时,我希望控制路径。默认情况下,当该行可见时,将调用适配器的getView()方法 这当然不是最好的行为之一,因为如果我有一个包含数百条记录的ListView,并且我需要到达底部的记录,在滚动ListView时,getView()方法将为每一行调用,直到我到达页脚为止 因此,我只想在滚动后调用getView,并且ListView处于暂停/空闲状态,但我不知道如何执行此操作: 我是这

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

一般来说,它工作得很好。但是,当视图(行)膨胀时,我希望控制路径。默认情况下,当该行可见时,将调用适配器的
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(),并且只对可见项目进行调用。

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

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


使用
notifyDataSetChanged()

检查ApiDemos,第2节,告诉适配器在不滚动时重新绘制可见视图Adapter@TomislavNovoselec,谢谢你的提示。这是值得研究的。谢谢你的链接。这篇文章和API演示中的示例一起帮助我实现了我的目标。现在我拥有了有史以来最智能的适配器。:)感谢您,在AYSNChrous调用中添加其他项目后调用notifyDataSetChanged()会有所帮助!(使用android查询)