Android分页加载

当天告警的记录数有时候高达上万条,一次性加载的话会很慢

方案:

分页加载,每页加载100条,当用户上滑到最后一条时,加载下一页

实施:

百度了一下,需要使用外部jar包【SmartRefreshLayout】,app已经挺大的了,每次打包 apk 都要好久,想利用项目中原有的东西来开发

问题:

项目中只有一个下拉刷新的功能,想借用这个功能来实现我的分页加载目的

改方案:

加载数据时,每页加载100条,但是加载后时间最新的,显示在最后面,加载完成后,listwiew focus到最后一条记录,向上划动,查看日期老一点的数据,滑动到最上面时,加载下一页数据

搞定!代码如下:

           <com.lc.iotstandard.ht.widget.refreshlayout.WaveSwipeRefreshLayout
                android:id="@+id/main_swipe"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
    
                <ListView
                    android:id="@+id/now_listview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:visibility="gone" >
                </ListView>
            </com.lc.iotstandard.ht.widget.refreshlayout.WaveSwipeRefreshLayout>
    private void initRefresh(){
        mWaveSwipeRefreshLayout.setColorSchemeColors(Color.WHITE, Color.WHITE);//设置水滴中旋转动画的颜色,参数1:水滴落下过程中的颜色,参数2:水滴已经落下后的颜色
        mWaveSwipeRefreshLayout.setWaveColor(0xFF00706b);//设置水滴样色
        mWaveSwipeRefreshLayout.setMaxDropHeight(300);//设置最大下拉高度
        mWaveSwipeRefreshLayout.setOnRefreshListener(new WaveSwipeRefreshLayout.OnRefreshListener(){
            @Override
            public void onRefresh() {
                 new GetAlarmInfoTask().execute();
                 mWaveSwipeRefreshLayout.setRefreshing(false);
            }
        });
    }
    class GetAlarmInfoTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... arg) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("orgCode", MyApplication.orgCode));
            params.add(new BasicNameValuePair("page", page + ""));
            page++;
            return HttpUtil.invoke(Constants.URL_todayAlarmData, params,
                    Base64.encode(MyApplication.auth.getBytes()));
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if (result != null) {
                try {
                    if (JSONParseUtil.parseDataInfo(result) != null) {
                        
                        List<HistoryAlarmInfo> list = JSONParseUtil
                                .parseHistoryAlarmInfoList(JSONParseUtil.parseDataInfo(result));
                        
                        for (HistoryAlarmInfo obj : list) {
                            historyAlarmInfoList.add(0, obj);
                        }
                        
                        if (list.size() > 0) {
                            ll_no_alarm.setVisibility(View.GONE);
                            now_listview.setVisibility(View.VISIBLE);
                            now_clear.setVisibility(View.VISIBLE);
                            
                            if (myHistoryAdapter != null) {
                                myHistoryAdapter.notifyDataSetChanged();
                            } else {
                                myHistoryAdapter = new MyHistoryAdapter();
                                now_listview.setAdapter(myHistoryAdapter);
                            }
                            
                            scrollMyListViewToBottom(list.size() - 1);
                        } else if (historyAlarmInfoList.size() > 0) {
                            Toast.makeText(context, "No more data!", Toast.LENGTH_LONG).show();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private void scrollMyListViewToBottom(final int pos) {
        now_listview.post(new Runnable() {
            @Override
            public void run() {
                // Select the last row so it will scroll into view...
                now_listview.setSelection(pos);
            }
        });
    }

注意这个 now_listview.post ,在列表加载完成后,再处理的代码块,这里选中最后一行,必须是列表加载完成以后再执行才能达到效果。

原文地址:https://www.cnblogs.com/LcxSummer/p/13178054.html