zoukankan      html  css  js  c++  java
  • 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 ,在列表加载完成后,再处理的代码块,这里选中最后一行,必须是列表加载完成以后再执行才能达到效果。

  • 相关阅读:
    ajax的post提交方式和传统的post提交方式哪个更快?
    请问具体到PHP的代码层面,改善高并发的措施有哪些
    TP为什么这个if判断什么都不显示?
    如何用正则匹配这段文本
    七牛上图片总是net::ERR_NAME_NOT_RESOLVED
    该如何来开发这个喜欢的功能呢?
    打包phar文件过大的问题。
    .map(function(item)...)这个是按hashcode自动遍历的,怎么才能按照我想要的顺序遍历呢?
    Java操作Kafka执行不成功
    webkit事件处理
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/13178054.html
Copyright © 2011-2022 走看看