android 滑动分页
2010-08-17 10:11
716 查看
分析了一下网上讲的滑动分页效果,我看用户体验不错,就模拟了一个如图
package com.my.activity;
import com.my.R;
import com.my.R.string;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
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.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
/**
*****滑动分页******
*实现原理: 通过手指的滑动,判断数据大小 然后动态改变数据,底部的加载是一个view
*
* @author owen
*@2010-8-17
*@上午09:29:07
*/
public class FenYeListActivity extends ListActivity implements OnScrollListener {
private static final String TAG = "**********FenYeListActivity.java*********";
private ItemAdapter adapter;
private int lastItem = 0;
private int mProgressStatus = 0;
private Handler mHandler = new Handler();
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LinearLayout searchLayout = new LinearLayout(this);
//水平方向的线性布局
searchLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加进展条
progressBar = new ProgressBar(this);
progressBar.setPadding(0, 0, 15, 0);
searchLayout.addView(progressBar, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//添加文字,设置文字垂直居中
TextView textView = new TextView(this);
textView.setText(R.string.app_loading);
textView.setGravity(Gravity.CENTER_VERTICAL);
searchLayout.addView(textView, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
//同时将进展条和加载文字显示在中间
searchLayout.setGravity(Gravity.CENTER);
LinearLayout loadingLayout = new LinearLayout(this);
loadingLayout.addView(searchLayout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
loadingLayout.setGravity(Gravity.CENTER);
//加载到listActivity的底部
getListView().addFooterView(loadingLayout);
registerForContextMenu(getListView());
adapter = new ItemAdapter();
setListAdapter(adapter);
getListView().setOnScrollListener(this);
}
/**
* firstVisbleItem 第一个可见的item
* visibleItemCount 可见的Item个数
* totalItemCount 总的个数
* lastItem 可见状态中,最后一个item
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
Log.i(TAG, "firstVisibleItem="+firstVisibleItem);
Log.i(TAG, "visibleItemCount="+visibleItemCount);
Log.i(TAG, "totalItemCount="+totalItemCount);
lastItem = firstVisibleItem + visibleItemCount - 1 ;
Log.i(TAG, "lastItem:" + lastItem);
}
/**
* 如果视图正在滚动,此方法将被调用之前,滚动下一帧呈现。特别是,它会被调用之前调用getView
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if(lastItem == adapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){
adapter.count += 10;
adapter.notifyDataSetChanged();
}
}
private class ItemAdapter extends BaseAdapter {
int count = 10;
@Override
public int getCount() {
// TODO Auto-generated method stub
return count;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView itemView = new TextView(FenYeListActivity.this);
itemView.setText("item " + position);
itemView.setHeight(90);
return itemView;
}
}
}
package com.my.activity;
import com.my.R;
import com.my.R.string;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
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.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
/**
*****滑动分页******
*实现原理: 通过手指的滑动,判断数据大小 然后动态改变数据,底部的加载是一个view
*
* @author owen
*@2010-8-17
*@上午09:29:07
*/
public class FenYeListActivity extends ListActivity implements OnScrollListener {
private static final String TAG = "**********FenYeListActivity.java*********";
private ItemAdapter adapter;
private int lastItem = 0;
private int mProgressStatus = 0;
private Handler mHandler = new Handler();
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LinearLayout searchLayout = new LinearLayout(this);
//水平方向的线性布局
searchLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加进展条
progressBar = new ProgressBar(this);
progressBar.setPadding(0, 0, 15, 0);
searchLayout.addView(progressBar, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//添加文字,设置文字垂直居中
TextView textView = new TextView(this);
textView.setText(R.string.app_loading);
textView.setGravity(Gravity.CENTER_VERTICAL);
searchLayout.addView(textView, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
//同时将进展条和加载文字显示在中间
searchLayout.setGravity(Gravity.CENTER);
LinearLayout loadingLayout = new LinearLayout(this);
loadingLayout.addView(searchLayout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
loadingLayout.setGravity(Gravity.CENTER);
//加载到listActivity的底部
getListView().addFooterView(loadingLayout);
registerForContextMenu(getListView());
adapter = new ItemAdapter();
setListAdapter(adapter);
getListView().setOnScrollListener(this);
}
/**
* firstVisbleItem 第一个可见的item
* visibleItemCount 可见的Item个数
* totalItemCount 总的个数
* lastItem 可见状态中,最后一个item
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
Log.i(TAG, "firstVisibleItem="+firstVisibleItem);
Log.i(TAG, "visibleItemCount="+visibleItemCount);
Log.i(TAG, "totalItemCount="+totalItemCount);
lastItem = firstVisibleItem + visibleItemCount - 1 ;
Log.i(TAG, "lastItem:" + lastItem);
}
/**
* 如果视图正在滚动,此方法将被调用之前,滚动下一帧呈现。特别是,它会被调用之前调用getView
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if(lastItem == adapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){
adapter.count += 10;
adapter.notifyDataSetChanged();
}
}
private class ItemAdapter extends BaseAdapter {
int count = 10;
@Override
public int getCount() {
// TODO Auto-generated method stub
return count;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView itemView = new TextView(FenYeListActivity.this);
itemView.setText("item " + position);
itemView.setHeight(90);
return itemView;
}
}
}
相关文章推荐
- Android腾讯微博客户端开发5:利用FootView实现ListView滑动动态加载实现分页
- Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多
- android左右滑动加载分页以及动态加载数据
- ANDROID GridView 分页平滑滑动 效果的实现(基于android TV遥控器操作)
- Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
- android滑动分页
- Android App中使用ViewPager实现滑动分页的要点解析
- android左右滑动加载分页以及动态加载数据
- android viewpager 滑动分页以及禁止划屏 (模拟新浪)
- Android SQLite PhoneGap sencha touch 中调用Java原生程序,数据加载到页面,并实现滑动分页
- Android滑动动态分页实现方法
- Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)
- android viewpager+fragment与利用viewpager滑动分页小技巧
- android开发之TabHost分页标签使用案例(带滑动效果)
- Android开发中滑动分页功能实例详解
- android滑动分页
- android viewpager+fragment与利用viewpager滑动分页小技巧
- Android ViewPager 分页滑动
- Android腾讯微博客户端开发5:利用FootView实现ListView滑动动态加载实现分页
- Android ListView 滑动分页