/**
* ListView 分页加载
* 1:通过底部按钮点击实现
*
* 没有ListView没有加底部视图就只需操作onScrollStateChanged
*
* 需要底部视图解开注释即可,并且要把onScrollStateChanged注释
*
* 流程图???ListView分页加载
* 1:ListView填充数据(适配器,数据源)
* 2:两种实现方式
* 方式1:通过底部按钮点击(当我数据加载完成的时候按钮还要吗???(当我数据加载完成时把底部视图干调))
* ListView.addFooterView(View)
* View需要加载一个视图(自己定义)
* 然后点击加载数据?
* 数据怎么加?在原来的基础上加载 参考我们加载方法
* 如何监听滑动?(一个接口)
* ListView的滑动接口 OnScrollListener
* 两个方法
* 方法1: onScrollStateChanged(自动加载的)
* 方法2:onScroll(点击加载)
* 方式2:自动加载(每次滑动到最底部时直接执行加载方法即可)
* 3:看效果
*
*
*
*
*
*
*
*
*
*
*/
public class Main2Activity extends Activity implements View.OnClickListener, AbsListView.OnScrollListener {
private ListView list;
private ArrayList<String> arr = new ArrayList<String>();
private Context con = Main2Activity.this;
private MyAdapter adapter;
//在底部添加的那个视图
private View mView;
private Button mLoadMore;
private ProgressBar mPro;
private int mMaxSize = 38;
private Handler mHandler = new Handler();
private int mLastIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initBottemView();
initViwe();
initDate();
initAdapter();
}
//实例化底部视图
private void initBottemView() {
mView = getLayoutInflater().inflate(R.layout.bottem_moban, null);
mLoadMore = (Button) mView.findViewById(R.id.Load_More_Btn);
mLoadMore.setOnClickListener(this);
mPro = (ProgressBar) mView.findViewById(R.id.Load_More_Pro);
}
//实例化适配器
private void initAdapter() {
adapter = new MyAdapter(con, arr);
list.setAdapter(adapter);
//监听ListView的滑动事件
list.setOnScrollListener(this);
}
//加载十条数据
private void initDate() {
for (int i = 0; i < 10; i++) {
arr.add("这是第" + i + "条数据");
}
}
//加载ListView组件
private void initViwe() {
list = (ListView) findViewById(R.id.list);
//在listView最底部加载一个视图模板
// list.addFooterView(mView);
}
private void LoadMore() {
int count = adapter.getCount();
if (mMaxSize >= (count + 10)) {
for (int i = count; i <= count + 10; i++) {
arr.add("这是第" + i + "条数据");
}
//当数据发生变化 需要刷新
adapter.notifyDataSetChanged();
Log.e("看看代码执行", "==========");
} else {
for (int i = count; i <= mMaxSize; i++) {
arr.add("这是第" + i + "条数据");
}
//当数据发生变化 需要刷新
adapter.notifyDataSetChanged();
Log.e("看看代码执行", "==========");
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Load_More_Btn:
//setVisibility设置视图是否隐藏的属性
//三个属性1:GONE让这个视图隐藏 位置也消失
//三个属性2:invisible也是隐藏但是位置还在
//三个属性3:visible让视图可见
mLoadMore.setVisibility(View.GONE);
mPro.setVisibility(View.VISIBLE);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
LoadMore();
}
}, 2000);
break;
}
}
//得到滑动的状态
/**
* scrollState:即滑动的状态。分为三种 0,1,2
=0 表示停止滑动的状态 SCROLL_STATE_IDLE
=1表示正在滚动,用户手指在屏幕上 SCROLL_STATE_TOUCH_SCROLL
=2表示正在滑动。用户手指已经离开屏幕 SCROLL_STATE_FLING
* @param view
* @param scrollState
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//当我这个ListView 静止的时候
Log.e("adapter.getCount",adapter.getCount()+"");
Log.e("mLastIndex",mLastIndex+"");
if(scrollState==0&&adapter.getCount()==mLastIndex){
// mLoadMore.setVisibility(View.VISIBLE);
// mPro.setVisibility(View.GONE);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
LoadMore();
}
}, 2000);
}
}
//滑动是做的操作
/**
* firstVisibleItem:当前屏幕能见的第一个item的position从0开始
* visibleItemCount:当前屏幕显示的item总数,不完全显示也算
* totalItemCount:listview的item总数
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mLastIndex = totalItemCount;
// Log.e("参数一:firstVisibleItem", firstVisibleItem + "");
// Log.e("参数二:visibleItemCount", visibleItemCount + "");
// Log.e("参数三:totalItemCount", totalItemCount + "");
// if(totalItemCount==mMaxSize+2){
// list.removeFooterView(mView);
// }
}
}
* ListView 分页加载
* 1:通过底部按钮点击实现
*
* 没有ListView没有加底部视图就只需操作onScrollStateChanged
*
* 需要底部视图解开注释即可,并且要把onScrollStateChanged注释
*
* 流程图???ListView分页加载
* 1:ListView填充数据(适配器,数据源)
* 2:两种实现方式
* 方式1:通过底部按钮点击(当我数据加载完成的时候按钮还要吗???(当我数据加载完成时把底部视图干调))
* ListView.addFooterView(View)
* View需要加载一个视图(自己定义)
* 然后点击加载数据?
* 数据怎么加?在原来的基础上加载 参考我们加载方法
* 如何监听滑动?(一个接口)
* ListView的滑动接口 OnScrollListener
* 两个方法
* 方法1: onScrollStateChanged(自动加载的)
* 方法2:onScroll(点击加载)
* 方式2:自动加载(每次滑动到最底部时直接执行加载方法即可)
* 3:看效果
*
*
*
*
*
*
*
*
*
*
*/
public class Main2Activity extends Activity implements View.OnClickListener, AbsListView.OnScrollListener {
private ListView list;
private ArrayList<String> arr = new ArrayList<String>();
private Context con = Main2Activity.this;
private MyAdapter adapter;
//在底部添加的那个视图
private View mView;
private Button mLoadMore;
private ProgressBar mPro;
private int mMaxSize = 38;
private Handler mHandler = new Handler();
private int mLastIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initBottemView();
initViwe();
initDate();
initAdapter();
}
//实例化底部视图
private void initBottemView() {
mView = getLayoutInflater().inflate(R.layout.bottem_moban, null);
mLoadMore = (Button) mView.findViewById(R.id.Load_More_Btn);
mLoadMore.setOnClickListener(this);
mPro = (ProgressBar) mView.findViewById(R.id.Load_More_Pro);
}
//实例化适配器
private void initAdapter() {
adapter = new MyAdapter(con, arr);
list.setAdapter(adapter);
//监听ListView的滑动事件
list.setOnScrollListener(this);
}
//加载十条数据
private void initDate() {
for (int i = 0; i < 10; i++) {
arr.add("这是第" + i + "条数据");
}
}
//加载ListView组件
private void initViwe() {
list = (ListView) findViewById(R.id.list);
//在listView最底部加载一个视图模板
// list.addFooterView(mView);
}
private void LoadMore() {
int count = adapter.getCount();
if (mMaxSize >= (count + 10)) {
for (int i = count; i <= count + 10; i++) {
arr.add("这是第" + i + "条数据");
}
//当数据发生变化 需要刷新
adapter.notifyDataSetChanged();
Log.e("看看代码执行", "==========");
} else {
for (int i = count; i <= mMaxSize; i++) {
arr.add("这是第" + i + "条数据");
}
//当数据发生变化 需要刷新
adapter.notifyDataSetChanged();
Log.e("看看代码执行", "==========");
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Load_More_Btn:
//setVisibility设置视图是否隐藏的属性
//三个属性1:GONE让这个视图隐藏 位置也消失
//三个属性2:invisible也是隐藏但是位置还在
//三个属性3:visible让视图可见
mLoadMore.setVisibility(View.GONE);
mPro.setVisibility(View.VISIBLE);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
LoadMore();
}
}, 2000);
break;
}
}
//得到滑动的状态
/**
* scrollState:即滑动的状态。分为三种 0,1,2
=0 表示停止滑动的状态 SCROLL_STATE_IDLE
=1表示正在滚动,用户手指在屏幕上 SCROLL_STATE_TOUCH_SCROLL
=2表示正在滑动。用户手指已经离开屏幕 SCROLL_STATE_FLING
* @param view
* @param scrollState
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//当我这个ListView 静止的时候
Log.e("adapter.getCount",adapter.getCount()+"");
Log.e("mLastIndex",mLastIndex+"");
if(scrollState==0&&adapter.getCount()==mLastIndex){
// mLoadMore.setVisibility(View.VISIBLE);
// mPro.setVisibility(View.GONE);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
LoadMore();
}
}, 2000);
}
}
//滑动是做的操作
/**
* firstVisibleItem:当前屏幕能见的第一个item的position从0开始
* visibleItemCount:当前屏幕显示的item总数,不完全显示也算
* totalItemCount:listview的item总数
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mLastIndex = totalItemCount;
// Log.e("参数一:firstVisibleItem", firstVisibleItem + "");
// Log.e("参数二:visibleItemCount", visibleItemCount + "");
// Log.e("参数三:totalItemCount", totalItemCount + "");
// if(totalItemCount==mMaxSize+2){
// list.removeFooterView(mView);
// }
}
}