當天告警的記錄數有時候高達上萬條,一次性加載的話會很慢
方案:
分頁加載,每頁加載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 ,在列表加載完成后,再處理的代碼塊,這里選中最后一行,必須是列表加載完成以后再執行才能達到效果。