listview的封装使用

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值