项目中ListView使用分析

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);
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值