项目中ListView使用分析

来源:互联网 发布:mac电脑照片导入iphone 编辑:程序博客网 时间:2024/06/05 21:50
1 我不喜欢用implements 的方式来写代码2 各种方式的区别总结3 看LoadMoreListView源码public class HomeSubjectListUI extends BaseFragmentActivity implements AdapterView.OnItemClickListener, NetRequestUtils.RequestListener, LoadMoreListView.RefreshListener, SwipeRefreshLayout.OnRefreshListener {    //加载更多数据lv    private LoadMoreListView praoseLv = null;    // 刷新控件    private SwipeRefreshLayout swipeLayout;    //是否正在加载数据标记,正在加载就是true,反之false,如果正在加载就不再调用接口    //1 初始值false; 2 开始加载数据前判断,false才调用,并改变其状态true;3 在数据回调中改为false    private boolean isLoadingData = false;    //adapter    private HomeSubjectListAdapter adapter;    //data    private List<SubjectVo> source;    //当前页,初始值1(根据后台接口会有不同),加载一页成功之后+1;    private int currentPage = 1;    //正在加载的页面,如果成功加载完毕,就将其赋值给crrentPage,加载失败就什么都不做,感觉有点多余    //其实就在成功回调中将currentPage++就可以了啊,刷新页面再将currentPage==1;    private int oldPage = 1;    //没有数据的提示    private TextView  empty_view;    @Override    protected void setContentView() {        setContentView(R.layout.praise_list_layout);    }    @Override    protected void findViewById() {        praoseLv = (LoadMoreListView) findViewById(R.id.refreshListView);        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);        empty_view = (TextView) findViewById(R.id.empty_view);    }    @Override    protected void setListener() {        //?        praoseLv.setOnScrollListener(new              PauseOnScrollListener(NextApplication.mImageLoader, true, true));        //加载更多的监听        praoseLv.setOnRefreshListener(this);        //下拉刷新        swipeLayout.setOnRefreshListener(this);    }    @Override    protected void initData() {        swipeLayout.setColorSchemeResources(R.color.app_title_bg);        empty_view.setVisibility(View.GONE);        //提前new ArrayaList        source = new ArrayList<SubjectVo>();        //提前new Adapter        adapter = new HomeSubjectListAdapter(this, source);        //提前setAdapter,这三步有时候我是在加载完数据之后做的        praoseLv.setAdapter(adapter);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                swipeLayout.setRefreshing(true);                loadData(1);            }        }, 500);        mRequestUtils = NetRequestUtils.getInstance();    }    private void loadData(int page) {        if (isLoadingData) {            return;        }        isLoadingData = true;        oldPage = page;        Map<String, String> params = new HashMap<String, String>();        params.put("page", page + "");        params.put("type", type + "");        params.put("classid","0");        JSONObject jsonRequest = mRequestUtils.getJsonRequest("home", "class_get_video", params);        mRequestUtils.requestJsonObject(jsonRequest, this);    }    @Override    public void onRefresh() {        loadData(1);    }    @Override    public void loadMore() {        loadData(currentPage + 1);    }    @Override    public void start() {    }    @Override    public void success(JSONObject response) {        currentPage = oldPage;        if (currentPage == 1) {            source.clear();        }        //这里用的是原生的解析方式        JSONArray jsonArray = response.optJSONArray("data");        parseJson(jsonArray);        adapter.resetSource(source);        isLoadingData = false;        swipeLayout.setRefreshing(false);        //判断请求回来数据的个数,后台定义一页有10条数据,如果小于10条,说明数据加载完毕,不用再去调加载更多的接口,反之就去加载        if (jsonArray != null && jsonArray.length() >= 10) {            praoseLv.resetFooterState(true);        } else {            praoseLv.resetFooterState(false);        }    }    @Override    public void error(VolleyError error, int errorCode, String errorMsg) {        isLoadingData = false;        swipeLayout.setRefreshing(false);        if (error != null) {            error.printStackTrace();        } else {            MyToast.showToast(this, errorMsg);        }    }    /*    解析json    将arr中的obj循环遍历拿出来,解析为我们要的对象,在一个个add到source中    比较麻烦,用gson可以直接解析为我们要的List,然后addAll,如果是下拉刷新,或者加载第一页    这里的方式是进行判断,如果currentPage是1,那么将source清空,否则就add    */    private void parseJson(JSONArray jsonArray) {        if (jsonArray != null) {            if (jsonArray.length() > 0) {                int count = jsonArray.length();                for (int i = 0; i < count; i++) {                    SubjectVo uInfo = new SubjectVo().parse(jsonArray.optJSONObject(i));                    source.add(uInfo);                }            }        }    }}