在滑动的过程中,只有在视野中的item才会加载数据,其他的其实显示的都是”loading…” 这样的好处就是如果加载的是图片的话,那么始终加载的只是几张图片而非是所有的图片,这样就能很好的避免出现内存溢出的问题,当然其他的图片要及时的回收才行,否则图片对象依然在内存里(这样的话图片最好先保存在本地,这样就不会频繁的发送请求,就不会产生网络流量),关于加载大量图片的问题会在以后的文章中出现。下面就看代码,非常简单。
public class ListViewTest extends Activity implements ListView.OnScrollListener {
private boolean mBusy = false;
ListView l;
SlowAdapter slowAdapter;
int totalPage = 10;// 共有页数
int nowPage = 1;// 当前页
int lastItem = 0;
List<String> mStrings= new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
l = (ListView) findViewById(R.id.mainList);
getListByPage(nowPage);
slowAdapter=new SlowAdapter(this,mStrings);
l.setAdapter(slowAdapter);
l.setOnScrollListener(this);
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
lastItem = firstVisibleItem + visibleItemCount - 1;
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { //滑动停止
mBusy = false;
if(lastItem==mStrings.size()-1){
nowPage++;
if (nowPage <= totalPage) {
getListByPage(nowPage);
}
}
slowAdapter.notifyDataSetChanged();
}
else if(scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){//滑动手未松开
mBusy = true;
}else if(scrollState == OnScrollListener.SCROLL_STATE_FLING){//滑动中手已松开
mBusy = true;
}
}
private class SlowAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<String> list;
public SlowAdapter(Context context,List<String> list) {
this.list=list;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView text;
if (convertView == null) {
text = (TextView)inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
} else {
text = (TextView)convertView;
}
if (!mBusy) {
text.setText(list.get(position));
} else {
text.setText("Loading...");
}
return text;
}
}
public void getListByPage(int page){
int start = (page-1)*20;
int size=page*20;
for(int i=start;i<size;i++){
mStrings.add("条目"+i);
}
}
分享到:
相关推荐
- **懒加载**:对于内部ListView的数据加载,可以采用懒加载的方式,只有当内部ListView滚动到视野内时,才开始加载数据和布局。 - **缓存数据**:对于频繁访问的数据,可以使用缓存机制来避免不必要的数据库或网络...
ListView是Android中的一个视图容器,它通过复用视图(ViewHolder模式)来提高性能,只加载屏幕可见的几项内容,当用户滚动时,重新绘制新进入视野的视图。对于水平滑动的ListView,我们需要重写这个滚动逻辑,使其...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。在某些设计中,我们可能需要实现类似iPhone的分组列表效果,即每个分组都有一个标题,且标题可以固定或者随着滚动而移动。这个自定义的...
综上,这个源码项目提供了如何在Android中实现高效、流畅的动态ListView,结合异步加载技术,解决了图片加载导致的性能问题,是安卓开发者学习和实践中不可或缺的一部分。通过深入研究这个项目,开发者可以提升在...
它的主要功能是展示大量的列表数据,通过上下滑动使屏幕外的数据滚动进入视野,而原有屏幕内的数据则滚出屏幕。这使得用户能够方便地浏览和交互大量信息。 1. **ListView的基本使用**: 在创建一个`ListView`时,...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。ListView的动画展示子项是提升用户体验的一个重要手段,能够使界面更具活力和吸引力。本文将深入探讨如何利用动画技术来实现ListView子项的...
在Android开发中,ListView是最常用的列表控件之一,用于展示大量数据列表。然而,随着数据量的增加,如果不进行优化,ListView的性能可能会显著下降,导致应用卡顿、内存泄漏等问题。以下是一些针对ListView ...
- **性能优化**:由于TV端通常有更高的分辨率和更大的视野,确保对大数据集的流畅加载和滚动至关重要。使用DiffUtil进行数据差异计算,可以减少不必要的视图刷新,提高性能。 总的来说,TV端的RecyclerView使用...
4. **动态加载**:为了优化性能,时间轴通常采用分段加载策略,只在用户视野内加载必要的事件数据。 5. **交互性**:时间轴上的事件节点应支持用户交互,如点击查看详情、滑动切换等。 在"TimelineText"文件中,...
数据绑定控件如DataGridView、ListView则用于显示和操作数据库或数据集中的数据。自定义控件则是开发者根据需求创建的特定功能控件。 DATAFLEXGRID控件是一种高级的数据网格控件,它提供了丰富的功能,以满足复杂的...
这些小项目不仅可以帮助初学者巩固基础知识,还能让有经验的开发者拓展视野。在这个名为"android学习小项目"的压缩包中,包含了10几个实用的Android应用示例,如备忘录、贪吃蛇游戏、记事本以及骨骼地图等。下面我们...
5. **Adapter**:Adapter是连接数据源和视图的桥梁,如ListView或RecyclerView的Adapter,负责将数据项映射到UI元素上。 6. **Material Design**:遵循Google的Material Design指南,这些应用可能使用了Material ...
2. **预加载策略**:预加载是指在用户看到当前视频之前,已经开始加载下一段或上一段视频的数据。这可以通过计算视口范围和视频长度来实现。 3. **视频解码与缓存**:使用高效的视频解码库(如FFmpeg)在后台将视频...
- 分块加载:卡马克地图缓冲的核心思想是将大图分割成小的、可管理的块或瓦片(tiles),只加载用户当前视野内的部分,这样可以避免一次性加载整个大图导致的内存压力。 - 预加载机制:当用户移动时,算法会预测...
5. 对`ListView`使用异步加载策略,避免一次性加载大量数据导致的性能问题。 总之,"android-map_list-源码"为我们提供了一个很好的示例,展示了如何在Android应用中集成地图和列表,以及如何实现它们之间的有效...
同时,它还支持动态加载数据,适应大数据量的场景。 总之,StickyHeaderListView是Android开发中的一个强大工具,它提高了列表视图的用户体验,尤其是在处理带有分组数据的列表时。正确理解和运用这个库,能够使...
在源代码中,我们可能会发现使用了Retrofit或Volley等网络库进行API请求,用Gson或Jackson进行JSON解析,然后通过RecyclerView或ListView显示数据。此外,为了提高用户体验,可能还采用了下拉刷新和上拉加载更多的...
6. **回调机制**:`SlimeRefresh`需要提供一个回调接口,以便在用户触发刷新后通知Activity或Fragment进行实际的数据加载。这个接口通常包含`onRefreshStart`和`onRefreshEnd`等方法,供开发者实现数据请求和刷新...
这些资源可以作为学习和参考,帮助开发者扩展视野,了解更多的开发实践和技术趋势。 【EyeRoom_v1.0.2】是EyeRoom项目的版本号,这表明源码对应的是EyeRoom的1.0.2版本。在Android应用开发中,版本号通常表示软件的...
5. **数据绑定**:ASP.NET支持强大的数据绑定机制,可以轻松地将数据源与控件连接,如GridView或ListView,实现数据的展示和编辑。 6. **状态管理**:ASP.NET提供了多种状态管理方式,如视图状态、隐藏字段、Cookie...