zoukankan      html  css  js  c++  java
  • Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中。
    实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法,判断当列表滑动到最低端时,加载新的列表项。
    其中OnScrollListener接口需要实现如下两个方法:
    onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
    view 报告滑动状态的视图
    firstVisibleItem 可视的第一个列表项的索引
    visibleItemCount 可视的列表项个数
    totalItemCount 总共的列表项个数
    onScrollStateChanged(AbsListView view, int scrollState)
    view 报告滑动状态的视图
    scrollState 滑动状态
    滑动状态包括
    SCROLL_STATE_IDLE : 0  视图没有滑动
    SCROLL_STATE_TOUCH_SCROLL : 1  用户正在触摸滑动,手指仍在屏幕上
    SCROLL_STATE_FLING : 2  用户之前触摸滑动,现在正在滑行,直到停止
    下面通过代码给大家演示效果
    main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7     <ListView
     8         android:id="@id/android:list"
     9         android:layout_width="match_parent"
    10         android:layout_height="match_parent"
    11         android:layout_weight="1"
    12         android:drawSelectorOnTop="false"
    13         />
    14 </LinearLayout>

    footer.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="wrap_content"
     5     android:gravity="center"
     6     android:orientation="horizontal"
     7     >
     8     <ProgressBar
     9         android:id="@+id/progressbar"
    10         android:layout_width="wrap_content"
    11         android:layout_height="wrap_content"
    12         style="?android:attr/progressBarStyleSmall"
    13         />
    14     <TextView
    15         android:layout_width="wrap_content"
    16         android:layout_height="wrap_content"
    17         android:textSize="20.0sp"
    18         android:text="正在加载..."
    19         />
    20 </LinearLayout>

    MainActicity.xml

      1 package com.szy.listview;
      2 
      3 import android.app.ListActivity;
      4 import android.os.Bundle;
      5 import android.os.Handler;
      6 import android.os.Message;
      7 import android.view.Gravity;
      8 import android.view.View;
      9 import android.view.ViewGroup;
     10 import android.widget.AbsListView;
     11 import android.widget.BaseAdapter;
     12 import android.widget.ListView;
     13 import android.widget.TextView;
     14 
     15 /**
     16  *@author coolszy
     17  *@date 2012-3-27
     18  *@blog http://blog.92coding.com
     19  */
     20 public class MainActivity extends ListActivity
     21 {
     22     private ListView mListView;
     23     private CustomAdapter mAdapter;
     24     private int mScrollState;
     25     private View mFooter;
     26 
     27     @Override
     28     public void onCreate(Bundle savedInstanceState)
     29     {
     30         super.onCreate(savedInstanceState);
     31         setContentView(R.layout.main);
     32 
     33         //获取ListView
     34         mListView = getListView();
     35         //根据footer.xml描述创建View
     36         mFooter = getLayoutInflater().inflate(R.layout.footer, null);
     37         // 在ListView底部添加正在加载视图
     38         //注意:addFooterView方法需要在调用setListAdapter方法前调用!
     39         mListView.addFooterView(mFooter);
     40         mAdapter = new CustomAdapter();
     41         setListAdapter(mAdapter);
     42         //给ListView添加滚动监听器
     43         mListView.setOnScrollListener(new AbsListView.OnScrollListener()
     44         {
     45             @Override
     46             public void onScrollStateChanged(AbsListView view, int scrollState)
     47             {
     48                 //记录当前状态
     49                 mScrollState = scrollState;
     50             }
     51 
     52             @Override
     53             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
     54             {
     55                 // 可视的最后一个列表项的索引
     56                 int lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
     57                 //当列表正处于滑动状态且滑动到列表底部时,执行
     58                 if (mScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
     59                     && lastVisibleItem == totalItemCount - 1)
     60                 {
     61                     // 执行线程,模拟睡眠5秒钟后添加10个列表项
     62                     new Thread()
     63                     {
     64 
     65                         private Handler handler = new Handler()
     66                         {
     67 
     68                             @Override
     69                             public void handleMessage(Message msg)
     70                             {
     71                                 super.handleMessage(msg);
     72                                 //增加Item数量
     73                                 mAdapter.count += 10;
     74                                 //通知数据集变化
     75                                 mAdapter.notifyDataSetChanged();
     76                             }
     77 
     78                         };
     79 
     80                         @Override
     81                         public void run()
     82                         {
     83                             super.run();
     84                             try
     85                             {
     86                                 sleep(5000);
     87                                 handler.sendEmptyMessage(0);
     88                             } catch (InterruptedException e)
     89                             {
     90                                 e.printStackTrace();
     91                             }
     92                         }
     93 
     94                     }.start();
     95                 }
     96             }
     97         });
     98     }
     99 
    100     private class CustomAdapter extends BaseAdapter
    101     {
    102         // 初始列表项数量
    103         int count = 20; 
    104 
    105         @Override
    106         public int getCount()
    107         {
    108             return count;
    109         }
    110 
    111         @Override
    112         public Object getItem(int position)
    113         {
    114             return position;
    115         }
    116 
    117         @Override
    118         public long getItemId(int position)
    119         {
    120             return position;
    121         }
    122 
    123         @Override
    124         public View getView(int position, View convertView, ViewGroup parent)
    125         {
    126             TextView result = (TextView) convertView;
    127             //动态创建TextView添加早ListView中
    128             if (result == null)
    129             {
    130                 result = new TextView(MainActivity.this);
    131                 result.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);
    132                 AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams
    133                                                         (AbsListView.LayoutParams.FILL_PARENT,
    134                                                         AbsListView.LayoutParams.WRAP_CONTENT);
    135                 result.setLayoutParams(layoutParams);
    136                 result.setGravity(Gravity.CENTER);
    137             }
    138             result.setText("第 " + (position + 1)+"行");
    139             return result;
    140         }
    141     }
    142 }

    效果预览
    若水工作室

    Android中动态更新ListView | 若水工作室 http://www.92coding.com/blog/index.php/archives/382.html

  • 相关阅读:
    查询某段时间内过生日的员工名单的SQL语句
    Winform中如何读取局域网路由的IP地址
    什么是组件,组件有何特点?
    SQL 存储过程优化总结
    MVC文件结构作用概述(1)
    SQL常用总结
    IEnumerable与IEnumerator区别
    转谈工程师的价值和发展
    新建项目,是否勾选“为解决方案创建目录”的文件结构的区别
    [转]c# asp.net 新建项目与新建网站区别
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/3236531.html
Copyright © 2011-2022 走看看