Android ListView 简单封装
因为编程中很多页面都会用到listview。避免每次都写一次listview的逻辑处理,包括下拉刷新,滑到底部加载更多等。所以这里做了一个简单的ListviewActivity封装下。
本人只是新手,只是写了个简单的demo。欢迎批评指导。谢谢
demo链接:http://pan.baidu.com/s/1slQYgkl
这个是listview
使用的时候 xml 的id 保持一致,我这里用listView 和 refreshLayout
因为要适配不同list,所以这里使用泛型T
/**
* 带listview的Activity可继承此Activity
* Created by mouse on 2016/9/8.
*/
public abstract class ListViewActivity<T> extends BaseActivity {
protected List<T> datas = new ArrayList<>();
protected BaseAdapter adapter;
public SwipeRefreshLayout refreshLayout;
protected MListView listView;
protected boolean isLoading, noMoreData;
protected int pageNo = 1;
protected View footerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(onRefreshListener);
listView = (MListView) findViewById(R.id.listView);
listView.setOnItemClickListener(null);
adapter = getAdapter();
footerView = LayoutInflater.from(this).inflate(R.layout.normal_list_footer, null);
listView.addFooterView(footerView);
if (getHeaderView() != null) {
listView.addHeaderView(getHeaderView());
}
listView.setAdapter(adapter);
listView.removeFooterView(footerView);
if (getCacheData() != null) {
datas.addAll(getCacheData());
}
if (datas.size() > 0) {
adapter.notifyDataSetChanged();
}
listView.setOnScrollStopAndEndListener(new MListView.OnScrollStopAndEndListener() {
@Override
public void onEndAndStopScroll() {
if (isLoading || noMoreData) {
return;
}
isLoading = true;
pageNo ++;
loading();
}
});
onRefreshListener.onRefresh();
refreshLayout.post(new Runnable() {
@Override
public void run() {
refreshLayout.setRefreshing(true);
}
});
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (refreshLayout.isRefreshing()) {
refreshLayout.setRefreshing(false);
}
}
}, 5000);
}
private SwipeRefreshLayout.OnRefreshListener onRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
pageNo = 1;
noMoreData = false;
isLoading = true;
loading();
}
};
/**此次添加headerView,如果没有,则返回null*/
protected abstract View getHeaderView();
/**获取adapter*/
protected abstract BaseAdapter getAdapter();
/**本地数据,如果没有则返回null*/
public abstract List<T> getCacheData();
/**网路数据*/
public abstract void loading();
/**
* 处理数据
* @param list
* @param pageSize 一页多少项
*/
public void handleDatas(List<T> list, int pageSize) {
isLoading = false;
if (list.size() < pageSize) {
noMoreData = true;
Toast.makeText(this, "没有更多数据了", Toast.LENGTH_SHORT).show();
}
if (noMoreData) {
if (listView.getFooterViewsCount() == 1) {
listView.removeFooterView(footerView);
}
} else {
if (listView.getFooterViewsCount() == 0) {
listView.addFooterView(footerView);
}
}
refreshLayout.setRefreshing(false);
if (pageNo == 1) {
datas.clear();
}
datas.addAll(list);
adapter.notifyDataSetChanged();
}
}
Activity基类
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getActivityLayoutID());
initView();
initData();
}
protected abstract int getActivityLayoutID();
protected abstract void initView();
protected abstract void initData();
}
实际使用继承该ListViewActivity即可
public class MainActivity extends ListViewActivity<String> {
@Override
protected View getHeaderView() {
return null;
}
@Override
protected BaseAdapter getAdapter() {
return new MyAdapter(this, datas);
}
@Override
public List<String> getCacheData() {
return null;
}