- 浏览: 47958 次
- 性别:
- 来自: 上海
最新评论
-
hanxie1121:
书读多了
思考一下!!!!my android -
huyong479072052:
不用说应届毕业生了,现在中国搞android的开发的有几个能达 ...
思考一下!!!!my android -
zhanhao:
顶!
思考一下!!!!my android -
cectsky:
你妈喊你回家吃饭
回调(callback)方法
ListView的动态加载,想必大家在网上都看过很多资料了。我在这里也不罗嗦,提供非常简单的Demo给一些需要的人。
这个Demo里面只有两个部分,
Activity做显示,以及一个Factory创建信息。
MainActivity.java
Java代码 收藏代码
CreateDataFactory.java
Java代码 收藏代码
CreateDataFactory模拟了网络调取API获取信息的实现,以及API数据分页。对于ListView的优化,以及滑动事件的监听还没去完善。不过这些代码对想学习ListView的动态加载,以及分页显示来说以及够了。
这个Demo里面只有两个部分,
Activity做显示,以及一个Factory创建信息。
MainActivity.java
Java代码 收藏代码
package com.demo; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity implements OnScrollListener,OnItemClickListener { private ListView listView; private List<String> currentData;//当前视图显示的数据 private CustomAdapter customadapter;//自定义适配器 private View loadingView;//加载视图的布局 private int currentPage = 1;//当前页,默认为1 private int pageSize = 10;//每页显示十条信息 private int last_item_position;//最后item的位置 private boolean isLoading = false;//是否加载过,控制加载次数 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView=(ListView)findViewById(R.id.lv_id); //加载视图布局 loadingView = LayoutInflater.from(this).inflate(R.layout.list_page_load, null); //创建当前用于显示视图的数据 currentData=CreateDataFactory.createUpdateData(currentPage,pageSize); //添加底部加载视图 listView.addFooterView(loadingView); //初始化适配器 customadapter=new CustomAdapter(); listView.setAdapter(customadapter); //滚动条监听 listView.setOnScrollListener(this); //ListView监听 listView.setOnItemClickListener(this); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { last_item_position = firstVisibleItem + visibleItemCount - 1; if(last_item_position==totalItemCount-2){//这里控制当焦点落在某一个位置时,开始加载. //当前是在第9个位置开始加载,改为totalItemCount-1 //则会在第10个位置开始加载 System.out.println("开始加载.."); Toast.makeText(MainActivity.this, "第 "+currentPage+" 页", Toast.LENGTH_LONG).show(); if(!isLoading){ new Thread(){ public void run() { isLoading = true; //开启一个线程加载数据,否则会堵塞当前线程 updateCurrendData(); //发送一个消息,通知数据加载完成 loadingHandler.sendEmptyMessage(0); } }.start(); } } //当ListView没有FooterView时,添加FooterView(---loadingView---) if(listView.getFooterViewsCount()==0){ listView.addFooterView(loadingView); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } Handler loadingHandler = new Handler(){ public void handleMessage(android.os.Message msg) { //修改adapter count customadapter.count = currentPage*pageSize; //更新 customadapter.notifyDataSetChanged(); //消除MSG loadingHandler.removeMessages(0); //删除FooterView listView.removeFooterView(loadingView); //进入下一页,此时视图未加载. isLoading = false; }; }; //添加List元素 private void updateCurrendData(){ //模拟联接网络以及从网络中获取数据花费的时间 try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //更新一次,当前页加1 currentPage++; //获取当前要更新的数据 List<String> updateDataList = CreateDataFactory.createUpdateData(currentPage, pageSize); //需要更新的数据加入当前数据集合 for(String itemData:updateDataList){ currentData.add(itemData); } } class CustomAdapter extends BaseAdapter{ int count=currentData.size(); @Override public int getCount() { // TODO Auto-generated method stub return count; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_page_item, null); TextView tv_content = (TextView) view.findViewById(R.id.tv_content); tv_content.setText(currentData.get(position)); return view; } } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } }
CreateDataFactory.java
Java代码 收藏代码
package com.demo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CreateDataFactory { public static List<String> createUpdateData(int currentPage,int pageSize){ List<String> list=new ArrayList<String>(); for(int i=(currentPage-1)*pageSize;i<currentPage*pageSize;i++){ list.add((i+1)+". 走在风中,今天阳光突然很温柔."); } return list; }}
CreateDataFactory模拟了网络调取API获取信息的实现,以及API数据分页。对于ListView的优化,以及滑动事件的监听还没去完善。不过这些代码对想学习ListView的动态加载,以及分页显示来说以及够了。
发表评论
-
android 4.0 取内外置SD卡新特性
2013-06-06 12:44 1167private StorageManager mStorage ... -
android 2.3 取内外置SD卡
2013-06-06 12:42 1927在android2.3中 判断内置SD卡是否挂载: if( ... -
android 关闭数据连接方法
2013-05-04 21:18 1585开关数据连接方法: Method getITelepho ... -
Activity Task Task 栈
2011-12-03 15:30 11271、Activity和Task task就好像是能包含很多a ... -
判断Android 网络状态
2011-12-03 11:53 926当需要开启Activity之前需要检测网络状态的时候需要用到一 ... -
LauncherEx UI初探及Drag机制了解
2011-11-23 10:34 1见下载!! -
Android APK签名
2011-11-23 10:30 13481.签名的意义 为了保证每个应用程序开发商合法ID,防止部 ... -
Android 横竖屏设置
2011-11-17 09:03 1135最近遇到一个问题,关于Android 横竖屏的问题,我的lau ... -
Android 设计之流畅设计
2011-11-14 20:42 775即使你的应用程序是快速且响应灵敏的,但一些设计仍然会给用户造成 ... -
Android_WindowManager分析
2011-11-02 13:53 1Activity 建立一个主窗口 ... -
onInterceptTouchEvent和onTouchEvent调用时序
2011-10-22 17:01 824onInterceptTouchEvent()是ViewGro ... -
activity 启动方式
2011-10-15 11:15 846在android里,有4种activity ... -
Android功能总结:仿照Launcher的Workspace实现左右滑动切换
2011-10-09 17:36 2295对于Launcher的桌面滑动大家应该都比较熟悉了,最好的体验 ... -
Android中的Handler, Looper, MessageQueue和Thread
2011-10-08 20:34 1174前几天,和同事探讨了一下Android中的消息机制,探究了消息 ... -
AppWidget加载流程(二)
2011-09-27 17:38 9441. 用户长按Launcher弹出添快捷组件的Dialog,选 ... -
AppWidget加载流程(一)
2011-09-27 17:34 12651. Android系统启动,SystemServer创建A ... -
Android(安卓) snippet
2011-09-21 10:33 01.获取屏幕的分辨率 在 activity 里利用如下编码,宽 ... -
Android 中Locale,auto-rotate状态的获取
2011-09-21 10:26 15501. 得到当前locale: Context.getReso ... -
深入理解Android消息处理系统——Looper、Handler、Thread
2011-09-19 10:56 1093熟悉Windows编程的朋友可能知道Windows程序是消息驱 ... -
理解Android系统的进程间通信原理(一)----RPC中的代理模式
2011-09-14 19:39 1073[size=medium]理解Android系统的进程间通信原 ...
相关推荐
"ListView实现动态加载"这个主题,涉及到的是如何高效地处理大量数据并根据用户滚动时动态加载更多内容的技术。动态加载通常用于节省内存,提高用户体验,避免一次性加载过多数据导致应用卡顿。 1. **ListView基础*...
本文将深入探讨如何使用Handler+线程和AsyncTask两种方法来实现ListView的动态加载分页。 首先,我们来看看Handler+线程的实现方式。在主线程中,我们不能直接进行耗时操作,如网络请求或数据库查询,因为这会导致...
ListView是Android平台中一个常用的控件,用于展示大量的数据列表,尤其在数据量大到无法一次性加载全部内容时,动态加载listitem(也称为“懒加载”)就显得尤为重要。这种技术可以显著提高应用的性能,减少内存...
然而,ListView的动态加载和它与ScrollView的兼容性问题,是开发者经常遇到的挑战。下面我们将深入探讨这两个主题。 **ListView动态加载** 动态加载,也称为懒加载,是为了提高应用性能和用户体验而采用的一种策略...
本篇主要探讨如何动态地添加和移除ListView中的item,以实现一个流畅的用户体验。 一、ListView的基本使用 1. XML布局:在布局文件中创建ListView,并为其指定id,例如`android:id="@+id/list_view"`。 2. 数据源:...
本教程将详细讲解如何在Android中实现ListView的动态添加和删除项功能。 一、ListView的基本使用 1. 布局文件:在XML布局文件中,我们需要定义一个ListView,通常会有一个对应的适配器(Adapter)来填充数据。例如...
标题"listView动态添加不同的item"指的是如何在ListView中根据不同的条件或分组动态地添加具有不同布局和内容的列表项。描述中的"实现listview在不同的分组下动态的添加不同的item的demo"进一步说明了这个话题,意味...
在实际应用中,我们常常需要在运行时动态地向`ListView`控件中添加或删除数据项。本文将详细介绍如何在C# WinForms应用程序中实现`ListView`的动态数据插入。 #### 一、ListView控件简介 `ListView` 是一个非常...
本文将深入探讨“那些复杂的列表总要弄个清楚——(一)ListView动态添加项”这一主题,主要关注如何在ListView中动态添加项目。 首先,我们需要了解ListView的基本结构。ListView由Adapter驱动,Adapter是连接数据...
"Android listview动态加载不同布局"这一主题,主要涉及如何在ListView中根据不同的数据类型或者状态显示不同的视图(View)布局,提升用户体验并优化性能。 首先,要实现ListView动态加载不同布局,我们需要理解...
jquery mobile listview动态加载json
动态添加和删除ListView中的Item是一项常见的功能,尤其在构建需要用户交互的应用时。本文将深入探讨如何实现这个需求,以及涉及到的关键知识点。 首先,我们需要理解ListView的工作原理。ListView通过Adapter与...
因此,"ListView动态加载,带图片的item"是一个重要的优化策略,旨在提高用户体验并减少资源消耗。 动态加载通常指的是“按需加载”或“懒加载”(Lazy Loading),即只在用户滚动到可视区域时才加载对应位置的数据...
【标题】:“ListView的动态加载-很简单的Demo” 在Android开发中,ListView是常见的用于展示大量数据的组件。然而,当数据集过大时,一次性加载所有条目可能导致内存消耗过高,影响应用性能。为了解决这个问题,...
本教程主要探讨如何仿新浪微博实现ListView的动态加载功能,这在处理大量数据时尤为关键,可以提高用户体验并降低内存消耗。 首先,我们需要理解ListView的基本工作原理。ListView通过复用已创建的列表项(ListView...
`ListView动态加载`是优化用户体验的关键技术,尤其在处理大数据集时。本示例将深入讲解如何结合网络API,实现在ListView滚动时动态加载更多数据,以及分页功能。 首先,我们需要理解ListView的工作原理。ListView...
在本视频案例“视频案例-3.ListView动态添加数据”中,我们将深入探讨如何在Android开发环境中,使用ListView组件动态地加载和展示数据。ListView是Android UI设计中的一个重要组成部分,它用于展示大量的数据列表,...
朋友你是不是也想对其优化,形成动态加载? 如果你也有过这样的想法,那么我们是同路人! 通过查看ListView的API,我们似乎找不到这样的接口来满足我们的需求,怎么办呢?不要忘记,我们不只是程序员,我们同样也...
本篇文章将深入探讨如何在ListView中动态添加数据,这在实际应用中是非常常见且重要的功能。 首先,理解ListView的基本结构至关重要。ListView主要由Adapter驱动,Adapter就像一个桥梁,连接数据源(例如ArrayList...
"android开发实现加载时动画跳动和listview动态增加一行控件"这个主题聚焦于两个核心知识点:加载动画的实现以及ListView的动态加载功能。 首先,加载时的动画跳动效果是提高用户交互性的一种策略,它能提供一种...