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
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 }

效果预览
<a href="https://i-blog.csdnimg.cn/blog_migrate/7efddb9855d306ef7ac389fac7165212.png" class="cboxElement" rel="example4" 382"="" style="text-decoration: none; color: rgb(1, 150, 227); ">若水工作室
代码下载:http://115.com/file/bepc3x5d

转载地址:http://blog.92coding.com/index.php/archives/382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidListView是一种常用的列表展示控件,用于展示大量数据的集合。动态创建ListView是指在运行时根据数据的变化动态地添加、删除或更新列表项。 首先,我们需要在XML布局文件定义ListView控件。可以使用ListView标签来创建一个空的ListView视图。然后,我们需要在Java代码获取对这个ListView的引用,以便后续操作。 接下来,我们需要创建一个数据适配器(Adapter)。适配器的作用是将数据项与ListView进行绑定,使得ListView能够正确地展示数据。常用的适配器是ArrayAdapter或BaseAdapter,我们需要根据具体需求来选择合适的适配器。 创建数据适配器后,我们需要将其设置给ListView。使用setAdapter()方法将适配器与ListView关联起来。 接下来,我们需要在代码准备好要展示的数据集合。可以使用ArrayList或数组等数据结构来存储数据。 当需要动态添加数据时,我们只需要在数据集合添加新的数据,并调用适配器的notifyDataSetChanged()方法来通知ListView进行更新ListView将会根据新的数据集合重新绘制列表项。 当需要删除或更新数据时,我们可以通过对数据集合进行删除或修改操作,并同样调用适配器的notifyDataSetChanged()方法来通知ListView进行更新。 总之,动态创建Android ListView需要以下步骤:定义布局文件ListView,获取ListView的引用,创建适配器并设置给ListView,准备数据集合,并根据需求动态添加、删除或更新数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值