Android ListView滑动加载
2012-06-12 16:51
218 查看
项目结构如图所示:
项目主要包括一个activity和三个xml页面布局,代码如下:
MainActivity.java
主要布局文件代码如下:
main.xml
main_more.xml
ListView单个显示item布局main_item.xml
项目运行结果如下图:
点击更多,十条,依次类推:
项目主要包括一个activity和三个xml页面布局,代码如下:
MainActivity.java
import android.app.ListActivity; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; 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.AbsListView.OnScrollListener; public class MainActivity extends ListActivity implements OnScrollListener { private ListView listView; //全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动 private int scrollState; //可加载记录的条数 private int count = 100; private int lastItem; //当前可见页面中的Item总数 private int visibleItemCount; private Button footerButton; private LinearLayout footerProgressBarLayout; private View view; private ListAdapter mAdapter = new ListAdapter(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载主页面布局 setContentView(R.layout.main); LayoutInflater inflater = LayoutInflater.from(this); //加载底部布局 view = inflater.inflate(R.layout.main_more, null); footerButton = (Button) view.findViewById(R.id.button); footerProgressBarLayout = (LinearLayout) view.findViewById(R.id.linearlayout); footerProgressBarLayout.setVisibility(View.GONE); //更多按钮点击事件 footerButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(lastItem == mAdapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){ //设置页面底部布局控件可见性 footerButton.setVisibility(View.GONE); footerProgressBarLayout.setVisibility(View.VISIBLE); if(mAdapter.count <= count){ //使用Handler动态加载数据 new Handler().postDelayed(new Runnable() { public void run() { mAdapter.count += 10; mAdapter.notifyDataSetChanged(); listView.setSelection(lastItem - visibleItemCount + 1); //获取数据成功设置Layout不可见,Button设为可见 footerButton.setVisibility(View.VISIBLE); footerProgressBarLayout.setVisibility(View.GONE); } } , 2000); } } } }); listView = getListView(); //将布局添加到ListView的Footer中 listView.addFooterView(view); listView.setAdapter(mAdapter); //设置滑动监听 listView.setOnScrollListener(this); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { this.visibleItemCount = visibleItemCount; lastItem = firstVisibleItem + visibleItemCount - 1; if(mAdapter.count >= count){ listView.removeFooterView(view); } // boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount; // if(loadMore){ // mAdapter.count += visibleItemCount; // mAdapter.notifyDataSetChanged(); // } } public void onScrollStateChanged(AbsListView view, int scrollState) { this.scrollState = scrollState; } /** * 数据匹配器 * @author qin_lei * */ public class ListAdapter extends BaseAdapter{ int count = 10; public int getCount() { return count; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(MainActivity.this); View view = inflater.inflate(R.layout.main_item, null); TextView tv = (TextView) view.findViewById(R.id.tv); tv.setText("Hello " + position); return view; } } }
主要布局文件代码如下:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
main_more.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="更多"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/linearlayout"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在获取..."/> </LinearLayout> </LinearLayout>
ListView单个显示item布局main_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/icon_head"/> <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="20dp" android:text="@string/hello"/> </LinearLayout>
项目运行结果如下图:
点击更多,十条,依次类推:
相关文章推荐
- android listView 滑动加载数据 该数据是服务端获取的
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- Android腾讯微博客户端开发五:利用FootView实现ListView滑动动态加载实现分页
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- 【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview
- android 超牛逼Listview滑动删除等菜单+下拉刷新加载更多
- Android Listview滑动时不加载数据,停下来时加载数据,让App更优
- Android Listview 加载图片优化--本地加载大量图片,解决滑动卡顿现象(滑动停止加载图片)
- 【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview
- Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)
- Android腾讯微博客户端开发5:利用FootView实现ListView滑动动态加载实现分页
- android ListView 滑动到最底部并且停止滑动时候加载数据
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
- Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多
- Android listview 滑动过程中不加载图片,停止时加载图片