`

ListView学习(三) 加载视野内的数据

阅读更多

在滑动的过程中,只有在视野中的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滚动到视野内时,才开始加载数据和布局。 - **缓存数据**:对于频繁访问的数据,可以使用缓存机制来避免不必要的数据库或网络...

    水平滑动的listView

    ListView是Android中的一个视图容器,它通过复用视图(ViewHolder模式)来提高性能,只加载屏幕可见的几项内容,当用户滚动时,重新绘制新进入视野的视图。对于水平滑动的ListView,我们需要重写这个滚动逻辑,使其...

    listview分组title可固定可移动

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。在某些设计中,我们可能需要实现类似iPhone的分组列表效果,即每个分组都有一个标题,且标题可以固定或者随着滚动而移动。这个自定义的...

    安卓Android源码——动态ListView,支持异步更新列表,异步更新图片.zip

    综上,这个源码项目提供了如何在Android中实现高效、流畅的动态ListView,结合异步加载技术,解决了图片加载导致的性能问题,是安卓开发者学习和实践中不可或缺的一部分。通过深入研究这个项目,开发者可以提升在...

    最常用和最难用的Android控件ListView

    它的主要功能是展示大量的列表数据,通过上下滑动使屏幕外的数据滚动进入视野,而原有屏幕内的数据则滚出屏幕。这使得用户能够方便地浏览和交互大量信息。 1. **ListView的基本使用**: 在创建一个`ListView`时,...

    ListView的动画展示子项

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。ListView的动画展示子项是提升用户体验的一个重要手段,能够使界面更具活力和吸引力。本文将深入探讨如何利用动画技术来实现ListView子项的...

    ListView Adapter优化 实例

    在Android开发中,ListView是最常用的列表控件之一,用于展示大量数据列表。然而,随着数据量的增加,如果不进行优化,ListView的性能可能会显著下降,导致应用卡顿、内存泄漏等问题。以下是一些针对ListView ...

    Android-在Tv端使用的RecyclerView修复了由于数据更新

    - **性能优化**:由于TV端通常有更高的分辨率和更大的视野,确保对大数据集的流畅加载和滚动至关重要。使用DiffUtil进行数据差异计算,可以减少不必要的视图刷新,提高性能。 总的来说,TV端的RecyclerView使用...

    安卓时间轴时光轴相关-时间轴(超越淘宝).zip

    4. **动态加载**:为了优化性能,时间轴通常采用分段加载策略,只在用户视野内加载必要的事件数据。 5. **交互性**:时间轴上的事件节点应支持用户交互,如点击查看详情、滑动切换等。 在"TimelineText"文件中,...

    c#控件说明

    数据绑定控件如DataGridView、ListView则用于显示和操作数据库或数据集中的数据。自定义控件则是开发者根据需求创建的特定功能控件。 DATAFLEXGRID控件是一种高级的数据网格控件,它提供了丰富的功能,以满足复杂的...

    android学习小项目

    这些小项目不仅可以帮助初学者巩固基础知识,还能让有经验的开发者拓展视野。在这个名为"android学习小项目"的压缩包中,包含了10几个实用的Android应用示例,如备忘录、贪吃蛇游戏、记事本以及骨骼地图等。下面我们...

    Android应用源码-新闻阅读类安卓源代码(16例).zip

    5. **Adapter**:Adapter是连接数据源和视图的桥梁,如ListView或RecyclerView的Adapter,负责将数据项映射到UI元素上。 6. **Material Design**:遵循Google的Material Design指南,这些应用可能使用了Material ...

    视频在滑动列表中的异步缓存和播放

    2. **预加载策略**:预加载是指在用户看到当前视频之前,已经开始加载下一段或上一段视频的数据。这可以通过计算视口范围和视频长度来实现。 3. **视频解码与缓存**:使用高效的视频解码库(如FFmpeg)在后台将视频...

    卡马克地图缓冲

    - 分块加载:卡马克地图缓冲的核心思想是将大图分割成小的、可管理的块或瓦片(tiles),只加载用户当前视野内的部分,这样可以避免一次性加载整个大图导致的内存压力。 - 预加载机制:当用户移动时,算法会预测...

    android-map_list-源码.rar

    5. 对`ListView`使用异步加载策略,避免一次性加载大量数据导致的性能问题。 总之,"android-map_list-源码"为我们提供了一个很好的示例,展示了如何在Android应用中集成地图和列表,以及如何实现它们之间的有效...

    功能强大的StickyHeaderListView.rar

    同时,它还支持动态加载数据,适应大数据量的场景。 总之,StickyHeaderListView是Android开发中的一个强大工具,它提高了列表视图的用户体验,尤其是在处理带有分组数据的列表时。正确理解和运用这个库,能够使...

    android网易客户端项目源代码

    在源代码中,我们可能会发现使用了Retrofit或Volley等网络库进行API请求,用Gson或Jackson进行JSON解析,然后通过RecyclerView或ListView显示数据。此外,为了提高用户体验,可能还采用了下拉刷新和上拉加载更多的...

    SlimeRefresh

    6. **回调机制**:`SlimeRefresh`需要提供一个回调接口,以便在用户触发刷新后通知Activity或Fragment进行实际的数据加载。这个接口通常包含`onRefreshStart`和`onRefreshEnd`等方法,供开发者实现数据请求和刷新...

    安卓Android源码——安卓桌面EyeRoom.rar

    这些资源可以作为学习和参考,帮助开发者扩展视野,了解更多的开发实践和技术趋势。 【EyeRoom_v1.0.2】是EyeRoom项目的版本号,这表明源码对应的是EyeRoom的1.0.2版本。在Android应用开发中,版本号通常表示软件的...

    ASP.net经典网站案例

    5. **数据绑定**:ASP.NET支持强大的数据绑定机制,可以轻松地将数据源与控件连接,如GridView或ListView,实现数据的展示和编辑。 6. **状态管理**:ASP.NET提供了多种状态管理方式,如视图状态、隐藏字段、Cookie...

Global site tag (gtag.js) - Google Analytics