日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android ListView分页,动态添加数据

發(fā)布時(shí)間:2023/12/13 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ListView分页,动态添加数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.ListView分頁的實(shí)現(xiàn),重點(diǎn)在于實(shí)現(xiàn)OnScrollListener接口,判斷滑動(dòng)到最后一項(xiàng)時(shí),是否還有數(shù)據(jù)可以加載,

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

自定義一個(gè)ListView(這里本來想進(jìn)行一些自定已修改的。。。實(shí)際代碼并沒有做)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每一項(xiàng)的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

有更多數(shù)據(jù)時(shí)的配置文件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對應(yīng)的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;//初始設(shè)置頁數(shù)為2,因?yàn)閯傞_始不知道總頁數(shù)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);//第一次訪問服務(wù)器接口,返回第一頁信息,并確定總頁數(shù)信息 thread.start();}//異步訪問網(wǎng)絡(luò)加載數(shù)據(jù)之類的。。Runnable runnable = new Runnable() {@Overridepublic void run() {//傳遞pageIndex,pageSize,URL等參數(shù)訪問網(wǎng)絡(luò)獲取數(shù)據(jù),這里省略。。。//doSomethingString strJson = "";//假定strJson就是服務(wù)器返回的這一頁Json數(shù)據(jù)//假設(shè)這里返回總頁數(shù)為5pageCount = 5;Message msg = new Message();msg.obj = strJson;handler.sendMessage(msg);//將消息返回給UI }};//處理返回的消息,設(shè)置ListViewHandler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {String strJson = msg.obj.toString();//各種轉(zhuǎn)換組合數(shù)據(jù),這里我們就不做了,模擬一下數(shù)據(jù)for(int i=0;i<pageSize; ++i){if(adapter != null && adapter.list != null)//從獲取第二頁開始,直接修改適配器的list {adapter.list.add(i+"");}else//第一次適配器還沒有構(gòu)造 {list.add(i+"");}}if(pageIndex == 1)//第一次,設(shè)置適配器 {adapter = new CornerAdapter(list, MainActivity.this);listView.setAdapter(adapter);//判斷一下是否顯示更多按鈕if(pageIndex == pageCount){listView.removeFooterView(footer);}else if(pageIndex < pageCount){//設(shè)置tvmsg顯示,加載動(dòng)畫不顯示 tvMsg.setVisibility(View.VISIBLE);loading.setVisibility(View.GONE);}}else{//直接調(diào)用方法更新數(shù)據(jù) adapter.notifyDataSetChanged();if(pageIndex == pageCount){listView.removeFooterView(footer);}else if(pageIndex < pageCount){//設(shè)置tvmsg顯示,加載動(dòng)畫不顯示 tvMsg.setVisibility(View.VISIBLE);loading.setVisibility(View.GONE);}}}};@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {//需要分頁,觸摸停止,當(dāng)前確實(shí)還有分頁數(shù)據(jù)if(is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE && pageIndex < pageCount){pageIndex += 1;//設(shè)置請求當(dāng)前頁碼加1Thread thread = new Thread(runnable);thread.start();}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {//現(xiàn)在 Bug初始情況下向下滑動(dòng)也能翻頁int lastVisibleItem = firstVisibleItem + visibleItemCount;//當(dāng)前滑動(dòng)到最后一項(xiàng)if(lastVisibleItem == totalItemCount && totalItemCount > 0){is_divPage = true;}} } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/niuge/p/4634390.html

總結(jié)

以上是生活随笔為你收集整理的Android ListView分页,动态添加数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。