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 ,在列表加載完成后,再處理的代碼塊,這里選中最后一行,必須是列表加載完成以后再執行才能達到效果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM