使用ansyntask为Gridview加载更多数据会导致记录混乱

时间:2016-04-08 04:07:57

标签: android android-asynctask android-gridview

我有一个包含1个GridView的活动,每当Onscroll被解雇时,都会从服务器加载10个记录。

`   @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        long lastVisibleItem = firstVisibleItem + visibleItemCount;
        int i = (totalItemCount) % AppGlobal.ROWS; //AppGlobal.ROWS = 10
        if(i == 0 && lastVisibleItem == totalItemCount){
            InitGrid(++currentPage );
        }
    }

    public void InitGrid(int page){
        ArrayList<absDataItem> items = new ArrayList<absDataItem>();
        try {
            if(AppGlobal.isInternetConnected)
                items = new LoadGridTask().execute("publishcontent", mCategory, page * AppGlobal.ROWS, AppGlobal.ROWS).get();
        } catch (InterruptedException | ExecutionException e) {
            Log.v(TAG, e.getMessage());
        }catch(Exception e){
            Log.v(TAG, e.getMessage());
        }

        if(items.size()>0){
            if(mAdapter==null) 
                mAdapter = new CategoryAdapter(AppGlobal.ApplicationContext);
            mAdapter.addAll(items);

            if(mGridView.getAdapter()==null){
                mGridView.setAdapter(mAdapter);
            }else{
                mAdapter.notifyDataSetChanged();
            }
        }
    }
`

除了第一次活动创建时,一切都运行正常,OnScroll事件触发两次,因此InitGrid函数运行2次,currentPage为0和1.因为任务LoadGridTask()在asynctask中所以,大部分时间, InitGrid(1)在InitGrid(0)之前完成,因此记录11-20显示在记录1-10之前,这使得我的记录不按预期顺序。

我该如何解决这个问题?先谢谢!

0 个答案:

没有答案