Android ListView分頁,動態添加數據

1.ListView分頁的實現,重點在于實現OnScrollListener接口,判斷滑動到最后一項時,是否還有數據可以加載,

我們可以利用listView.addFootView(View v)方法進行提示

自定義一個ListView(這里本來想進行一些自定已修改的。。。實際代碼并沒有做)CornerListView

package com.example.testlistview;import android.widget.AbsListView;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;public class CornerListView extends ListView{public CornerListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub
    }public CornerListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub
    }public CornerListView(Context context) {super(context);// TODO Auto-generated constructor stub
    }
}

包含ListView的配置文件 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.testlistview.MainActivity" ><com.example.testlistview.CornerListView android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_margin="10dip"android:id="@+id/list"></com.example.testlistview.CornerListView></RelativeLayout>

ListView每一項的Item配置文件? listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/tvTitle"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="1"android:gravity="center_horizontal"></TextView>
</LinearLayout>
View Code

有更多數據時的配置文件more.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TextView android:id="@+id/tv_msg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="更多"/><ProgressBar android:id="@+id/loading"style="@android:style/Widget.ProgressBar.Large"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:visibility="gone"/>
</RelativeLayout>
View Code

CorernerListView對應的Adapter適配器 CornerAdapter.java

package com.example.testlistview;import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;public class CornerAdapter extends BaseAdapter{LayoutInflater inflater;public List<String> list;private Context context;public CornerAdapter(List<String> list, Context context) {this.list = list;this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if(convertView == null){viewHolder = new ViewHolder();convertView = LayoutInflater.from(context).inflate(R.layout.listview_item, null, false);TextView tv1= (TextView) convertView.findViewById(R.id.tvTitle);viewHolder.tv = tv1;convertView.setTag(viewHolder);}else{viewHolder = (ViewHolder) convertView.getTag();}viewHolder.tv.setText(list.get(position));return convertView;}class ViewHolder{public TextView tv;}
}
View Code


主Activity代碼:

package com.example.testlistview;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.TextView;public class MainActivity extends Activity implements OnScrollListener{private int pageIndex = 1;private int pageSize = 2;private int pageCount = 2;//初始設置頁數為2,因為剛開始不知道總頁數private CornerListView listView;private CornerAdapter adapter;private View footer,tvMsg,loading;private boolean is_divPage = false;//是否分頁private List<String> list = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (CornerListView) findViewById(R.id.list);listView.setOnScrollListener(this);footer = View.inflate(this, R.layout.more, null);tvMsg = footer.findViewById(R.id.tv_msg);loading = footer.findViewById(R.id.loading);listView.addFooterView(footer);//添加footerviewThread thread = new Thread(runnable);//第一次訪問服務器接口,返回第一頁信息,并確定總頁數信息
        thread.start();}//異步訪問網絡加載數據之類的。。Runnable runnable = new Runnable() {@Overridepublic void run() {//傳遞pageIndex,pageSize,URL等參數訪問網絡獲取數據,這里省略。。。//doSomethingString strJson = "";//假定strJson就是服務器返回的這一頁Json數據//假設這里返回總頁數為5pageCount = 5;Message msg = new Message();msg.obj = strJson;handler.sendMessage(msg);//將消息返回給UI
            }};//處理返回的消息,設置ListViewHandler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {String strJson = msg.obj.toString();//各種轉換組合數據,這里我們就不做了,模擬一下數據for(int i=0;i<pageSize; ++i){if(adapter != null && adapter.list != null)//從獲取第二頁開始,直接修改適配器的list
                {adapter.list.add(i+"");}else//第一次適配器還沒有構造
                {list.add(i+"");}}if(pageIndex == 1)//第一次,設置適配器
            {adapter = new CornerAdapter(list, MainActivity.this);listView.setAdapter(adapter);//判斷一下是否顯示更多按鈕if(pageIndex == pageCount){listView.removeFooterView(footer);}else if(pageIndex < pageCount){//設置tvmsg顯示,加載動畫不顯示
                    tvMsg.setVisibility(View.VISIBLE);loading.setVisibility(View.GONE);}}else{//直接調用方法更新數據
                adapter.notifyDataSetChanged();if(pageIndex == pageCount){listView.removeFooterView(footer);}else if(pageIndex < pageCount){//設置tvmsg顯示,加載動畫不顯示
                    tvMsg.setVisibility(View.VISIBLE);loading.setVisibility(View.GONE);}}}};@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {//需要分頁,觸摸停止,當前確實還有分頁數據if(is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE && pageIndex < pageCount){pageIndex += 1;//設置請求當前頁碼加1Thread thread = new Thread(runnable);thread.start();}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {//現在 Bug初始情況下向下滑動也能翻頁int lastVisibleItem = firstVisibleItem + visibleItemCount;//當前滑動到最后一項if(lastVisibleItem == totalItemCount && totalItemCount > 0){is_divPage = true;}}
}
View Code

?

轉載于:https://www.cnblogs.com/niuge/p/4634390.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

faster rcnn的測試

當訓練結束后&#xff0c;faster rcnn的模型保存在在py-faster-rcnn/output目錄下&#xff0c;這時就可以用已有的模型對新的數據進行測試。 下面簡要說一下測試流程。 測試的主要代碼是./tools/test_net.py&#xff0c;并且使用到了fast_rcnn中test.py。 主要流程就是&…

python重點知識 鉆石_python——子類對象如何訪問父類的同名方法

1. 為什么只說方法不說屬性關于“子類對象如何訪問父類的同名屬性“是沒有意義的。因為父類的屬性子類都有&#xff0c;子類還有父類沒有的屬性&#xff0c;在初始化時&#xff0c;給子類對象具體化所有的給定屬性&#xff0c;完全沒必要訪問父類的屬性&#xff0c;因為是一樣的…

Android-Universal-Image-Loader 的使用說明

這個圖片異步載入并緩存的類已經被非常多開發人員所使用&#xff0c;是最經常使用的幾個開源庫之中的一個&#xff0c;主流的應用&#xff0c;隨便反編譯幾個火的項目&#xff0c;都能夠見到它的身影。但是有的人并不知道怎樣去使用這庫怎樣進行配置&#xff0c;網上查到的信息…

faster rcnn end2end 訓練與測試

除了前面講過的rpn與fast rcnn交替訓練外&#xff0c;faster rcnn還提供了一種近乎聯合的訓練&#xff0c;姑且稱為end2end訓練。 根據論文所講&#xff0c;end2end的訓練一氣呵成&#xff0c;對于前向傳播&#xff0c;rpn可以作為預設的網絡提供proposal.而在后向傳播中&…

jquery ui動態切換主題的一種實現方式

這兩天看coreservlets上的jQuery教程&#xff0c;雖然比較老了&#xff0c;不過講得還是不錯。最后一部分講jQuery ui 主題切換&#xff0c;用他介紹的方法實現不了。于是自己修改了下&#xff0c;可以了。代碼如下&#xff1a;html部分&#xff1a;<fieldset class"ui…

[學習總結]7、Android AsyncTask完全解析,帶你從源碼的角度徹底理解

我們都知道&#xff0c;Android UI是線程不安全的&#xff0c;如果想要在子線程里進行UI操作&#xff0c;就需要借助Android的異步消息處理機制。之前我也寫過了一篇文章從源碼層面分析了Android的異步消息處理機制&#xff0c;感興趣的朋友可以參考 Android Handler、Message完…

python字頻統計軟件_python結巴分詞以及詞頻統計實例

python結巴分詞以及詞頻統計實例發布時間&#xff1a;2018-03-20 14:52,瀏覽次數&#xff1a;773, 標簽&#xff1a;python# codingutf-8Created on 2018年3月19日author: chenkai結巴分詞支持三種分詞模式&#xff1a;精確模式: 試圖將句子最精確地切開&#xff0c;適合文…

html從入門到賣電腦(三)

CSS3中和動畫有關的屬性有三個 transform、 transition 和 animation。下面來一一說明: transform 從字面來看transform的釋義為改變&#xff0c;使…變形&#xff1b;轉換 。這里我們就可以理解為變形。那都能怎么變呢&#xff1f; none 表示不進行變換&#xff1b; rotat…

visual studio 2015安裝 無法啟動程序,因為計算機丟失D3DCOMPILER_47.dll 的解決方法

對于題目中的解決方法&#xff0c;我查到了微軟提供的一個方案&#xff1a;https://support.microsoft.com/en-us/help/4019990/update-for-the-d3dcompiler-47-dll-component-on-windows 進入如下頁面&#xff1a;http://www.catalog.update.microsoft.com/Search.aspx?qKB4…

UI1_UIView層操作

// // ViewController.m // UI1_UIView層操作 // // Created by zhangxueming on 15/7/1. // Copyright (c) 2015年 zhangxueming. All rights reserved. //#import "ViewController.h"interface ViewController ()endimplementation ViewController- (void)view…

JavaScript Patterns 1 Introduction

1.1 Pattern "theme of recurring events or objects… it can be a template or model which can be used to generate things" (http://en.wikipedia.org/wiki/Pattern). ? Design patterns - Elements of Reusable Object-Oriented Software. ? Coding patte…

基于像素聚類的分割方法基于slic的方法_博士論文摘要 | 張榮春:數碼影像與TLS點云數據融合提取地質結構面方法研究...

《測繪學報》構建與學術的橋梁 拉近與權威的距離數碼影像與TLS點云數據融合提取地質結構面方法研究張榮春1,21.南京郵電大學地理與生物信息學院, 江蘇 南京 210023;2.河海大學地球科學與工程學院, 江蘇 南京 211100收稿日期&#xff1a;2019-03-27基金項目&#xff1a;國家自然…

制作IOS 后臺極光推送時,遇到的小問題

推送廣義上分為兩種&#xff0c; 一種是 程序在前臺的時候&#xff0c;不想在任務欄里面顯示通知&#xff0c;直接在app中進行某種操作。這個叫做自定義消息。這個是在前臺時&#xff0c;app與極光后臺建立了一個長鏈接。 另一種是 程序處于前、后臺 或者殺死狀態的時候&…

Visual Studio 2008 環境變量的配置(參考設置VS2010)

本文轉載自&#xff1a;http://blog.csdn.net/tracyliang223/article/details/21539361COPY FROM&#xff1a;http://www.cnblogs.com/waterlin/archive/2011/10/31/2230341.html 在調試 Visual Studio 2008 程序時&#xff0c;經常有一些動態鏈接庫&#xff08;即 dll 文件&am…

Linq 中 Any與All

昨天突然看到之前寫的一個積累文檔&#xff0c;其中文檔中有一個Linq Any和All的注意事項&#xff1a;注意Any 和 All var list new List<int>(); var aa list.All(n > n > 1); var bb list.Any(n > n > 1); // aa: true bb: false其中List是一個元…

jaxb轉xml空值雙標簽_單品運營思維:標簽-詞路-聚焦-直搜-超直

非標品標簽思維&#xff1a;針對非標品 主要是2.0為主的打法根據搜索入池的關鍵詞&#xff0c;有什么詞做什么詞。有個細節&#xff1a;不一定進什么詞做什么詞&#xff0c;這個維度當中加入3.0的思維3.0入手 轉2.0再切3.0(檢測詞路健康度&#xff0c;非嚴格意義估算單量)舉例&…

如何在PFSense中設置故障轉移和負載平衡

故障轉移是一種備份操作模式&#xff0c;僅在主系統由于系統故障或任何計劃停機時間而變得不可用時&#xff0c;系統組件&#xff08;如網絡&#xff09;的操作才由輔助系統承擔。在本教程中&#xff0c;我們將看到如何設置故障轉移和負載平衡&#xff0c;以使pfSense能夠將流量…

圖像金字塔總結

本文轉載自&#xff1a; http://blog.csdn.net/dcrmg/article/details/52561656 一、 圖像金字塔 圖像金字塔是一種以多分辨率來解釋圖像的結構&#xff0c;通過對原始圖像進行多尺度像素采樣的方式&#xff0c;生成N個不同分辨率的圖像。把具有最高級別分辨率的圖像放在底部…

表單的get和post使用情景

GET和POST兩種方法都是將數據送到服務器&#xff0c;但你該用哪一種呢&#xff1f;HTTP標準包含這兩種方法是為了達到不同的目的。POST用于創建資源&#xff0c;資源的內容會被編入HTTP請示的內容中。例如&#xff0c;處理訂貨表單、在數據庫中加入新數據行等。 當請求無副作用…

什么叫做羅列式_項目起盤的時候,如何確定自己該做什么社群?

這是祁杰『社群日記』第48篇持續日更&#xff0c;做最懂社群的營銷咨詢人很多人手上有資源&#xff0c;準備起盤項目的時候&#xff0c;總會思考一個問題&#xff1a;我能做什么樣的社群&#xff1f;今天我們從用戶需求出發&#xff0c;拆解一下哪些社群是能夠確切地滿足用戶的…