Android ListView上拉加载的简单封装
这是对ListView上拉加载的一个简单封装
这里写图片描述
继承自ListView,同时提供加载接口
原理就是通过对FooterView的控制实现上划加载的效果
public class LoadMoreListView extends ListView {
private View mLoadMoreFooter;
private OnLoadMoreListener mLoadMoreListener;
private boolean mAddedFooter;
private boolean mLoadMore;
public interface OnLoadMoreListener extends OnScrollListener {
// 加载更多数据
void onLoadMoreData();
}
public LoadMoreListView(Context context) {
super(context);
init();
}
public LoadMoreListView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LoadMoreListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mLoadMoreFooter = LayoutInflater.from(getContext()).inflate(R.layout.load_more_view, null);
this.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (mLoadMoreListener != null) {
mLoadMoreListener.onScrollStateChanged(view, scrollState);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mLoadMoreListener != null) {
mLoadMoreListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
// 滑动到底部显示LoadingMore
if (firstVisibleItem + visibleItemCount == totalItemCount && mLoadMore) {
showLoadMoreView();
// 加载耗时操作
post(new Runnable() {
@Override
public void run() {
mLoadMoreListener.onLoadMoreData();
mLoadMore = false;
}
});
}
}
}
});
}
// 加载数据完成
public void loadMoreComplete() {
deferNotifyDataSetChanged();
setLoadMore(false);
}
public void setLoadMore(boolean loadMore) {
mLoadMore = loadMore;
if (!loadMore) {
removeFooterView(mLoadMoreFooter);
}
}
private void showLoadMoreView() {
if (!mAddedFooter) {
addFooterView(mLoadMoreFooter);
mAddedFooter = true;
}
}
public void setLoadMoreListener(OnLoadMoreListener loadMoreListener) {
this.mLoadMoreListener = loadMoreListener;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
调用示例
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MyListView";
private LoadMoreListView mLvList;
private List<String> mData = new ArrayList<>();
private Handler mHandler = new Handler();
{
for (int i = 0; i < 50; i++) {
mData.add("num " + i);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLvList = (LoadMoreListView) findViewById(R.id.id_lv_list);
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mData);
mLvList.setAdapter(adapter);
mLvList.setLoadMore(true);
mLvList.setLoadMoreListener(new LoadMoreListView.OnLoadMoreListener() {
@Override
public void onLoadMoreData() {
// 模拟一个异步操作,阻塞3秒
new Thread() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mData.add("LoadMoreOne");
mData.add("LoadMoreTwo");
mHandler.post(new Runnable() {
@Override
public void run() {
// adapter.notifyDataSetChanged();
mLvList.loadMoreComplete();
}
});
}
}.start();
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
}
---------------------
作者:杨天睿
来源:CSDN
原文:https://blog.csdn.net/y874961524/article/details/53248121
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号