我怎样才能延缓意见装载在我的名单适配器,用户滚动快 [英] How can I delay the loading of views in my list adapter while the user is scrolling fast

查看:128
本文介绍了我怎样才能延缓意见装载在我的名单适配器,用户滚动快的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的列表视图图像,从网上下载。 我想把东西在我的getView(),所以它不会下载的图片,如果用户丢/滚动快?

I have images in my listview that download from the internet. I want to put something in my getView() so that it doesn't download the images if the user is flinging/scrolling fast?

我如何开始这样做?

推荐答案

您可以通过以下步骤延缓意见,你的ListView的加载。

You can delay the loading of views in your ListView by following these steps.

首先,你应该让你的的ListView 对象和 YO​​UR_COSTOM_ADAPTER_OBJECT 类变量。 然后,设置一个onScroll监听器为您的ListView

Firstly, you should make your ListView Object and YOUR_COSTOM_ADAPTER_OBJECT class variables. then, set a onScroll Listener for your ListView

获取滚动速度从你的ListView的onScroll监听器
获取滚动速度从onScroll监听器,当速度变快,告诉你的适配器没有加载图像。

Get Scrolling Speed from your ListView's onScroll Listener:
Get the scroll speed from your onScroll listener and when the speed gets faster, tell your adapter to not load images.

例如code:

class YourClass extends Activity
{
YOUR_CUSTOM_LISTVIEW_ADAPTER adapter;
ListView YOUR_LISTVIEW;
ArrayList<YOUR_DATA_TYPE> listViewData;

onCreate(...){
.....
.....
//ListView data Initialization
listViewData = new ArrayList<YOUR_DATA_TYPE>();
listViewData.clear();
YOUR_LISTVIEW = (ListView)findViewById(R.id.YOUR_LISTVIEW_ID);
//adapter Initialization
adapter = new YOUR_CUSTOM_LISTVIEW_ADAPTER(....);
YOUR_LISTVIEW.setAdapter(adapter);
}

private OnScrollListener onScrollListener = new OnScrollListener() {

private int previousFirstVisibleItem = 0;
private long previousEventTime = 0;
private double speed = 0;

@Override
public void onScroll(HtcAbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
{
    if (previousFirstVisibleItem != firstVisibleItem)
    {
        long currTime = System.currentTimeMillis();
        long timeToScrollOneElement = currTime - previousEventTime;
        speed = ((double)1/timeToScrollOneElement)*1000;

        previousFirstVisibleItem = firstVisibleItem;
        previousEventTime = currTime;

        Log.d("DBG", "Speed: " +speed + " elements/second");

        //Tell adapter to not load images if it has reached a specific speed
        if(speed>YOUR_DESIRED_VALUE)
        {
            doNotLoadImagesInListView();
        }
        else
        {
            loadImagesInListView();
        }
    }
}

@Override
public void onScrollStateChanged(HtcAbsListView view, int scrollState) 
{
}
};

void doNotLoadImagesInListView()
{
    adapter.isScrollFast = true;
    adapter.notifyDataSetChanged();
    YOUR_LISTVIEW.setAdapter(adapter);
}

void loadImagesInListView()
{
    adapter.isScrollFast = false;
    adapter.notifyDataSetChanged();
    YOUR_LISTVIEW.setAdapter(adapter);
}


}


配置您的自定义列表适配器作出相应修改:

public class yourCustomAdapter extends BaseAdapter
{
    public Boolean isScrollFast;

public yourCustomAdapter(..... , ....., Boolean isScrollFast)
{
    ....
    this.isScrollFast = isScrollFast;
    .....
}

@Override
public int getCount() 
{
    .....
}

@Override
public Object getItem(int position) 
{
    .....
}

@Override
public long getItemId(int position) 
{
    .....
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    .......
    if(isScrollFast==true)
    {
        //Don't Load Images
    }
    else
    {
        //Load Images normally
    }

    return vi;
}
}

我希望这对你的作品。

I Hope this works for you.

这篇关于我怎样才能延缓意见装载在我的名单适配器,用户滚动快的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆