Android ListView数据的分批显示功能

Android ListView数据的分批显示

布局文件activity_call_safe2.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" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView style="@style/TitleStyle" android:text="黑名单管理" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="添加" /> </RelativeLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="11" > <LinearLayout android:id="@+id/ll_pb" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:visibility="invisible" android:orientation="vertical" > <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="玩命加载中..." /> </LinearLayout> <include android:id="@+id/list_view_callsafe" layout="@layout/list_view_callsafe"/> </FrameLayout> </LinearLayout>逻辑文件,实现页面的分页显示,监听ListView的滑动事件,滑动的时候就更新数据

CasllSafeActivity.java

package com.ldw.safe.Activity; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.ldw.safe.R; import com.ldw.safe.adapter.MyBaseAdapter; import com.ldw.safe.bean.BlackNumberInfo; import com.ldw.safe.db.dao.BlackNumberDao; public class CallSafeActivity extends Activity { private ListView list_view_callsafe; private List<BlackNumberInfo> blackNumberInfos; private LinearLayout ll_pb; private BlackNumberDao dao; private CallSafeAdapter adapter; private int totalNumber;//总的条数 private int mStartIndex = 0;//开始加载的位置 private int maxCount = 20;//每页加载多少数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_call_safe2); initUi(); initData(); } //初始化数据 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //数据初始化结束,关闭家在全的展示 ll_pb.setVisibility(View.INVISIBLE); //防止适配器一直刷新 if(adapter == null){ adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this); //配置适配器 list_view_callsafe.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } } }; private EditText et_page_number; //初始化数据 private void initData() { //防止阻塞主线程,在子线程中初始化数据(后期数据会很多) new Thread(){ @Override public void run(){ dao = new BlackNumberDao(CallSafeActivity.this); //一共有多少条数据 totalNumber = dao.getTotalNumber(); //分批加载数据 if(blackNumberInfos == null){ //第一次加载 blackNumberInfos = dao.findPar2(mStartIndex, maxCount); }else{ //把后面的数据。追加到blackNumberInfos集合里面。防止黑名单被覆盖 blackNumberInfos.addAll(dao.findPar2(mStartIndex, maxCount)); } handler.sendEmptyMessage(0); } }.start(); } //初始化UI private void initUi() { ll_pb = (LinearLayout) findViewById(R.id.ll_pb); //初始化的时候展示加载的圆圈 ll_pb.setVisibility(View.VISIBLE); list_view_callsafe = (ListView) findViewById(R.id.list_view_callsafe); //设置listView的滚动监听器 list_view_callsafe.setOnScrollListener(new OnScrollListener(){ //状态改变时候回调的方法 /* * @param scrollState 表示滚动的状态 *AbsListView.OnScrollListener.SCROLL_STATE_IDLE 闲置状态 *AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL 手指触摸的时候的状态 *AbsListView.OnScrollListener.SCROLL_STATE_FLING 惯性 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: //获取到最后一条显示的数据条数 int lastVisiblePosition = list_view_callsafe.getLastVisiblePosition(); System.out.println("lastVisiblePosition==========" + lastVisiblePosition); if(lastVisiblePosition == blackNumberInfos.size() - 1){//判断最后一个数据是不是每页显示的数据-1 // 加载更多的数据。 更改加载数据的开始位置 mStartIndex += maxCount; if (mStartIndex >= totalNumber) { Toast.makeText(getApplicationContext(), "没有更多的数据了。", Toast.LENGTH_SHORT).show(); return; } initData(); } break; } } //listview滚动的时候调用的方法 //时时调用。当我们的手指触摸的屏幕的时候就调用 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } }); } //对代码进行优化,继承自定义MyBaseAdapter,MyBaseAdapter继承自BaseAdapter封装一些常用的方法 private class CallSafeAdapter extends MyBaseAdapter<BlackNumberInfo>{ private CallSafeAdapter(List lists, Context mContext){ super(lists, mContext); } @Override public View getView(int position, View convertView, ViewGroup parent) { //谷歌推出的优化方案 ViewHolder holder; if(convertView == null){ convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null); holder = new ViewHolder(); holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number); holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode); holder.iv_delete = (ImageView) convertView.findViewById(R.id.iv_delete); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.tv_number.setText(lists.get(position).getNumber()); String mode = lists.get(position).getMode(); if(mode.equals("1")){ holder.tv_mode.setText("电话和短信拦截"); }else if(mode.equals("2")){ holder.tv_mode.setText("电话拦截"); }else if(mode.equals("3")){ holder.tv_mode.setText("短信拦截"); } final BlackNumberInfo info = lists.get(position); //监听删除数据按钮,删除数据 holder.iv_delete.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { String number = info.getNumber(); boolean result = dao.delete(number); if(result){ Toast.makeText(CallSafeActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); lists.remove(info); //更新ListView adapter.notifyDataSetChanged(); }else{ Toast.makeText(CallSafeActivity.this, "删除失败", Toast.LENGTH_SHORT).show(); } } }); return convertView; /* //谷歌推出的优化方案 ViewHolder holder; if(convertView == null){ convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null); holder = new ViewHolder(); holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number); holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.tv_number.setText(blackNumberInfos.get(position).getNumber()); String mode = blackNumberInfos.get(position).getMode(); if(mode.equals("1")){ holder.tv_mode.setText("电话和短信拦截"); }else if(mode.equals("2")){ holder.tv_mode.setText("电话拦截"); }else if(mode.equals("3")){ holder.tv_mode.setText("短信拦截"); } return convertView; */ /*初步的优化 convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null); TextView tv_number = (TextView) convertView.findViewById(R.id.tv_number); TextView tv_mode = (TextView) convertView.findViewById(R.id.tv_mode); tv_number.setText(blackNumberInfos.get(position).getNumber()); String mode = blackNumberInfos.get(position).getMode(); if(mode.equals("1")){ tv_mode.setText("电话和短信拦截"); }else if(mode.equals("2")){ tv_mode.setText("电话拦截"); }else if(mode.equals("3")){ tv_mode.setText("短信拦截"); } return convertView; */ /*传统的方式 View view = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null); TextView tv_number = (TextView) view.findViewById(R.id.tv_number); TextView tv_mode = (TextView) view.findViewById(R.id.tv_mode); tv_number.setText(blackNumberInfos.get(position).getNumber()); String mode = blackNumberInfos.get(position).getMode(); if(mode.equals("1")){ tv_mode.setText("电话和短信拦截"); }else if(mode.equals("2")){ tv_mode.setText("电话拦截"); }else if(mode.equals("3")){ tv_mode.setText("短信拦截"); } return view; */ } } static class ViewHolder{ TextView tv_number; TextView tv_mode; ImageView iv_delete; } }

以上所述是小编给大家介绍的Android ListView数据的分批显示功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

时间: 2024-09-10 05:35:22

Android ListView数据的分批显示功能的相关文章

解决Android ListView数据为空及加载错误的方法_Android

在项目中,都会用到ListView或GridView等列表控件.一般会用来展示从网络请求的数据 .如果请求的数据为空或者在请求的时候正好无没有网络了,我们的界面应该如何展示呢?数据为空的时候,ListView可以使用setEmptyView (View emptyView) 方法来我们需要的统一界面.数据加载失败呢?我们也可以统一进行处理. //下面这个类是简单地封装用于无数据及加载错误的一个页面. public class CommonShowView { private Context mC

Android ListView滚动到底后自动加载数据_Android

熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们 今天就要讲一讲列表组件ListView加载数据的相关内容.通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服 务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.比如:微博客户端可能会在用户滑动至列表底端时自动加 载下一页数据,也可能在底部放置一个"加载更多"按钮,

android中ListView数据刷新时的同步方法

  本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

数据不显示-android ListView的item数据的显示问题

问题描述 android ListView的item数据的显示问题 获取到的应该显示的数据都可以打印出来,但是界面上只有时间显示了出来,其他数据都 没有显示出来,查看布局也没发现哪儿的问题,希望各位帮帮忙喽! item的数据未显示部分布局如下: android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/rellay0&

Android零基础入门第44节:ListView数据动态更新

原文:Android零基础入门第44节:ListView数据动态更新    经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变.增加几行.或者删除几行,这就涉及到ListView数据的更新问题.     接下来通过一个简单的示例程序来学习ListView的数据更新.     继续使用WidgetSample工程,在app/main/res/lay

android listview 滚动数据重复

问题描述 android listview 滚动数据重复 我的listview 每个item都有一个edittext 默认值是1 当我修改第一行的edittext值之后 向下滚动 下边某一行的edittext值就变的跟第一行一样了 这该怎么解决 求解答? 解决方案 Android ListView 滚动加载数据Android ListView 滚动加载数据Android ListView 滚动加载数据

关于 Android Listview不显示数据的问题

问题描述 关于 Android Listview不显示数据的问题 ListView 正常,数据也正常,但是就是不显示数据. List View 中包含Item布局(TextView),ViewPager中包含ListView,MainActivity中包含Viewpager. ==== TextView >ListView >ViewPager >MainActivity ==== ListView .setAdapter(Context,ArrayList);debug调试发现 Con

listview 数据阴影-android listview 滑动数据阴影

问题描述 android listview 滑动数据阴影 我的listview,在显示数据时,偶尔会有滑动数据有阴影的现象.如图所示.一旦有阴影就只能重启才会好.请问高手可能怎么回事! 解决方案 Android[ ListView]滑动数据加载android listView滑动加载数据Android ListView 去阴影 解决方案二: listview有去掉阴影的属性,你查查就可以了 解决方案三: android:id=""@+id/id_main_listview"&

Android实现ListView数据动态加载的方法_Android

本文实例讲述了Android实现ListView数据动态加载的方法.分享给大家供大家参考,具体如下: list.setOnScrollListener(new OnScrollListener() { //添加滚动条滚到最底部,加载余下的元素 public void onScrollStateChanged(AbsListView view, int scrollState) { // if (scrollState == OnScrollListener.SCROLL_STATE_IDLE)