滚动网格布局时仍然加载图像

时间:2012-02-26 08:03:54

标签: android gridview

我尝试使用网格视图创建一个适配器包含图像的列表。 我还将onscrolllistener设置为无穷无尽的列表。 但问题是当我滚动时,已经加载的图像再次从服务器加载。

这是我的代码:

public class ListProductLama extends Activity{
    ArrayList<listBarang> list=new ArrayList<listBarang>();
    ArrayList<listBarang> temp=new ArrayList<listBarang>();
    ListAdapter adapter;
    int itemsPerPage = 4;
    int itemLoaded=0;
    boolean loadingMore = false;
    boolean full=false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.adapter);
        Context ctx = getApplicationContext();
        adapter=new ListAdapter(ctx, R.layout.adapterlist,list);
        ParsingXML parse=new ParsingXML(this, constant.GET_LIST_PRODUCT);
        parse.parse();
        ListProductHandler handler=(ListProductHandler)parse.getMyExampleHandler();
        ParsedListProductDataSet a=handler.getParsedData();
        list=a.getList();
        GridView grid=(GridView)findViewById(R.id.gridView1);

        grid.setAdapter(adapter);
        grid.setOnScrollListener(new OnScrollListener(){
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {}  
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {     
                if(!(full)){
                int lastInScreen = firstVisibleItem + visibleItemCount;

                if((lastInScreen == totalItemCount) && !(loadingMore)){                 
                    Thread thread =  new Thread(null, loadMoreListItems);
                    thread.start();
                }
                }
            }
        });

    }
    //Runnable untuk load the items 
    private Runnable loadMoreListItems = new Runnable() {           
        @Override
        public void run() {
            loadingMore = true;

            //Reset the array that holds the new items
            temp=new ArrayList<listBarang>();

            if(itemLoaded+itemsPerPage>=list.size()){
                itemsPerPage=list.size()-itemLoaded;
                full=true;
            }
                int index=itemLoaded;

                for (int i = 0; i < itemsPerPage; i++) {        
                    temp.add(list.get(index));
                    index++;

                }
            runOnUiThread(returnRes);

        }
    };  

    private Runnable returnRes = new Runnable() {
        @Override
        public void run() {         
            //Loop through the new items and add them to the adapter
            if(temp != null && temp.size() > 0){
                for(int i=0;i<temp.size();i++)
                    adapter.add(temp.get(i));
            }
            adapter.notifyDataSetChanged();
            itemLoaded+=itemsPerPage;
            loadingMore = false;
        }
    };
}

任何人都可以帮助我吗?

0 个答案:

没有答案