`

ListView 分段加载

 
阅读更多

转载 http://yangguangfu.iteye.com/blog/832809

 

滚动方式:

 

    package com.yangguangfu.listview;  
      
    import android.app.ListActivity;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.Gravity;  
    import android.view.View;  
    import android.view.ViewGroup;  
    import android.widget.AbsListView;  
    import android.widget.BaseAdapter;  
    import android.widget.LinearLayout;  
    import android.widget.ListView;  
    import android.widget.ProgressBar;  
    import android.widget.TextView;  
    import android.widget.AbsListView.OnScrollListener;  
    import android.widget.LinearLayout.LayoutParams;  
    /** 
     *  
     * @author 阿福 
     * 
     */  
    public class MainActivity extends ListActivity implements OnScrollListener {  
          
        private static final String TAG = "MainActivity";  
        private listViewAdapter adapter = new listViewAdapter();  
        private int lastItem = 0;  
        /** 
         * 设置布局显示为目标有多大就多大 
         */  
        private LayoutParams WClayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);  
        /** 
         * 设置布局显示目标最大化 
         */  
        private LayoutParams FFlayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);  
          
        private ProgressBar progressBar;  
      
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
      
            Log.i(TAG, "onCreate(Bundle savedInstanceState)" );  
            //线性布局  
            LinearLayout layout = new LinearLayout(this);  
           //设置布局 水平方向  
            layout.setOrientation(LinearLayout.HORIZONTAL);  
             //进度条  
            progressBar = new ProgressBar(this);  
             //进度条显示位置  
            progressBar.setPadding(0, 0, 15, 0);  
              
            layout.addView(progressBar, WClayoutParams);  
              
            TextView textView = new TextView(this);  
            textView.setText("加载中...");  
            textView.setGravity(Gravity.CENTER_VERTICAL);  
              
            layout.addView(textView, FFlayoutParams);  
            layout.setGravity(Gravity.CENTER);  
              
            LinearLayout loadingLayout = new LinearLayout(this);  
            loadingLayout.addView(layout, WClayoutParams);  
            loadingLayout.setGravity(Gravity.CENTER);  
              
            //得到一个ListView用来显示条目  
            ListView listView = getListView();  
            //添加到脚页显示  
            listView.addFooterView(loadingLayout);  
            //  
            registerForContextMenu(listView);  
            //  
            setListAdapter(adapter);  
            listView.setOnScrollListener(this);  
        }  
      
        public void onScroll(AbsListView v, int firstVisibleItem,  
                int visibleItemCount, int totalItemCount) {  
            lastItem = firstVisibleItem + visibleItemCount - 1;  
            System.out.println("lastItem:" + lastItem);  
            Log.i(TAG, "lastItem:" + lastItem);  
              
        }  
      
        public void onScrollStateChanged(AbsListView v, int state) {  
            if (lastItem == adapter.count  
                    && state == OnScrollListener.SCROLL_STATE_IDLE) {  
                adapter.count += 10;  
                adapter.notifyDataSetChanged();  
                Log.i(TAG, "lastItem:" + lastItem);  
            }  
        }  
      /** 
       * 要用用于生成显示数据 
       * @author 阿福 
       * 
       */  
        class listViewAdapter extends BaseAdapter {  
            int count = 10;  
      
            public int getCount() {  
                Log.i(TAG, "count:" + count);  
                return count;  
            }  
      
            public Object getItem(int pos) {  
                Log.i(TAG, "pos:" + pos);  
                return pos;  
            }  
      
            public long getItemId(int pos) {  
                return pos;  
            }  
      
            public View getView(int pos, View v, ViewGroup p) {  
                TextView view = new TextView(MainActivity.this);  
                view.setText("阿福播放器 " + pos);  
                Log.i(TAG, "entry: " + pos);  
                view.setTextSize(20f);  
                view.setHeight(80);  
                return view;  
            }  
        }  
    }  

 
 

 

单击按钮直接加载

    package com.yangguangfu.listview;  
      
      
    import android.app.ListActivity;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.Gravity;  
    import android.view.View;  
    import android.view.ViewGroup;  
    import android.widget.AbsListView;  
    import android.widget.BaseAdapter;  
    import android.widget.Button;  
    import android.widget.LinearLayout;  
    import android.widget.ListView;  
    import android.widget.TextView;  
    import android.widget.LinearLayout.LayoutParams;  
    /** 
     *  
     * @author 阿福 
     * 
     */  
    public class ButtonLoadingActivity extends ListActivity    {  
        private static final String TAG = "ButtonLoadingActivity";  
             
        private  listViewAdapter adapter = new listViewAdapter();  
        /** 
         * 设置布局显示为目标有多大就多大 
         */  
        private LayoutParams WClayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);  
        /** 
         * 设置布局显示目标最大化 
         */  
        private LayoutParams FFlayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);  
          
        protected void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                 Log.i(TAG, "onCreate(Bundle savedInstanceState):" );  
                  LinearLayout layout = new LinearLayout(this);  
                  layout.setOrientation(LinearLayout.HORIZONTAL);  
                   
                  Button button = new Button(this);  
                  button.setText("点击加载下五条...");  
                  button.setGravity(Gravity.CENTER_VERTICAL);  
                     
                  layout.addView(button,FFlayoutParams);  
                  layout.setGravity(Gravity.CENTER);  
                  LinearLayout loadingLayout = new LinearLayout(this);  
                  loadingLayout.addView(layout,WClayoutParams);  
                  loadingLayout.setGravity(Gravity.CENTER);  
                     
                     
                  ListView listView = getListView();  
                     
                  listView.addFooterView(loadingLayout);  
                     
                  button.setOnClickListener(new Button.OnClickListener()     
                  {         @Override        
                     public void onClick(View v)    
                  {           
                      adapter.count += 5;    
                      Log.i(TAG, "setOnClickListener:" +  adapter.count);  
                      adapter.notifyDataSetChanged();  
                      }        
                  });    
                   
              setListAdapter(adapter);    
         }  
      
      
        public void onScrollStateChanged(AbsListView v, int s) {  
             Log.i(TAG, "onScrollStateChanged(AbsListView v, int s)");  
        }       
      
        class listViewAdapter extends BaseAdapter {  
            int count = 10; /* starting amount */  
      
            public int getCount() { return count; }  
            public Object getItem(int pos) { return pos; }  
            public long getItemId(int pos) { return pos; }  
      
            public View getView(int pos, View v, ViewGroup p) {  
                     TextView textView = new TextView(ButtonLoadingActivity.this);  
                     textView.setHeight(80);  
                     textView.setTextSize(20);  
                     textView.setText("阿福播放器 " + pos);  
                     Log.i(TAG, "getView:pos:" + pos);  
                    return textView;  
             }  
         }  
      
      
      
    }  

 

  • 大小: 18.8 KB
  • 大小: 21.6 KB
分享到:
评论

相关推荐

    为ListView添加分段标头

    为了增强用户体验和数据组织的清晰性,我们有时需要在ListView中添加分段标头(Section Header)。标题“为ListView添加分段标头”涉及到的就是如何在ListView中实现这种功能,使得用户能更方便地浏览和定位数据。 ...

    简单的分段加载,下拉刷新。

    综上所述,"简单的分段加载,下拉刷新"这一功能虽然看似简单,但涉及到Android UI组件、手势识别、网络请求、数据处理等多个方面,需要开发者具备扎实的Android开发基础和良好的用户体验设计意识。通过不断学习和...

    ListView分段显示,拉到末尾自动刷新源码

    在Android开发中,ListView是一...总之,实现ListView的分段显示和拉到末尾自动刷新功能,需要结合Adapter、OnScrollListener以及自定义的数据加载逻辑。通过这样的设计,我们可以为用户提供更加流畅和便捷的交互体验。

    tree和listview资源管理器

    开发工具:vc++6.0 开发语言:c++ 主要功能:实现了仿windows资源管理器功能,通过txt文件生成左侧树结构,点击树节点右侧listview...由于数据较多所以采用分段加载节点,也就是在需要展开节点时加载该节点下的节点。

    ListView实现分页功能【附Demo源码】

    关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...

    listView 添加多个不同的adapter

    总的来说,要在ListView中添加多个不同的Adapter,可以通过组合Adapter、使用Header/Footer或者创建分段ListView来实现。"SectionedDemo"项目很可能是展示了最后一种方法,即通过自定义一个SectionedAdapter来管理多...

    带索引的listview

    在处理大量数据时,为了提高性能,你可以采用异步加载或者分页加载策略。同时,通过使用ViewHolder模式,可以减少视图的创建和查找,提升列表的滚动流畅性。 **交互设计** 为了提供良好的用户体验,还可以考虑以下...

    ListView分页功能源码.zip

    关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...

    Viewpage+Listview

    - `ListView` 支持头尾分段、选择模式、自定义视图等多种功能。 3. **结合使用**: - 在 `ViewPager` 中嵌套 `ListView`,需要自定义 `ViewPager` 的页面,每个页面就是一个包含 `ListView` 的布局。 - 自定义的...

    android listView字母排列

    - ListView是Android SDK中的一个视图容器,它可以动态加载数据并根据屏幕大小滚动显示。 - 通过设置Adapter(如ArrayAdapter或BaseAdapter)将数据与ListView关联,Adapter负责将数据转化为ListView的Item视图。 ...

    ListView性能优化

    - 当ListView内容过多时,不一次性加载所有数据,而是根据用户滚动情况,分段加载。可以通过监听`onScrollListener()`,在滚动到列表底部时加载更多内容。 5. **分页加载**: - 服务器端和数据库端应提供分页接口...

    带固定header浮层的listview

    7. **布局管理**: 对于header的布局,通常会在XML中创建一个独立的布局文件,然后在Adapter中加载这个布局。也可以通过代码动态创建和添加View。 8. **事件处理**: 需要确保header视图上的点击事件能够正常响应,这...

    android ListView 按字母 检索

    getSections()返回一个包含所有分段(即字母)的数组,getPositionForSection(int section)返回指定分段的第一个元素的位置,getSectionForPosition(int position)则返回给定位置元素所属的分段。 实现...

    ListViewForScrollView实现Scrollview中嵌套listView.zip

    5. **适配器调整**:如果ListView的数据源来自网络或其他异步加载,可能需要在数据加载完成后再设置Adapter,以防止ScrollView在数据未准备好时就开始滚动。 通过这个“ListViewForScrollView”的实现,开发者可以...

    Android-Android加载大图可以高清显示10000*10000像素的图片轻松实现微博长图功能

    8. **分段加载**:对于极长的图片,可以将其分割成多个部分,每次只加载和显示当前可视范围内的图片部分,这样可以大大降低内存需求。 9. **渐进式加载**:对于网络加载的大图,可以使用渐进式加载技术,先加载低...

    android带索引ListView

    Android系统会根据需要动态地加载和回收这些视图,以优化内存使用。开发者通常需要定义一个Adapter来填充ListView,Adapter将数据集与ListView的视图绑定。 在这个例子中,我们可能有一个包含城市名的ArrayList,每...

    ListView的优化

    - **延时加载**:当`ListView`包含大量数据时,可以采用分段加载的方式,即只加载当前屏幕上可见的数据,当用户滚动到新的区域时再加载新的数据。 - **分页显示**:服务器端提供分页接口,客户端按需请求数据,...

    pinned-section-listview-master

    2. **Sectioning**:固定部分的实现涉及到将数据分段,其中一部分被固定在顶部。这需要在Adapter中实现逻辑来识别哪些数据应该被当作“section”。 3. **View Holder**:为了提高ListView的性能,项目可能使用了...

    ListView 实现点击侧边A-Z快速查找_Android.rar

    - 为了提高性能,可以使用分段(Section)的适配器,这种适配器会根据首字母将数据分成多个部分,每部分对应ListView的一个子View。这样在滚动时,只加载可见部分的数据,减少内存消耗。 8. **动画效果**: - ...

    ListView分页功能

    关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...

Global site tag (gtag.js) - Google Analytics