XListView+HttpURLConnection+imageLoader

本文详细介绍了如何结合XListView、HttpURLConnection和imageLoader来实现高效的数据加载与图片显示,涵盖了XListView的底部和头部组件用法。
摘要由CSDN通过智能技术生成

> XlistView

package weilin.bwei.com.weilin20171227.xlistviewtext;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.DecelerateInterpolator;
import android.widget.AbsListView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Date;

import weilin.bwei.com.weilin20171227.R;

/**
 * Created by lenovo on 2017/12/27.
 */

public class XListView extends ListView implements AbsListView.OnScrollListener {
    private float mLastY = -1; // save event y
    private Scroller mScroller; // 用于回滚
    private OnScrollListener mScrollListener; // 回滚监听
    // 触发刷新和加载更多接口.
    private IXListViewListener mListViewListener;
    // -- 头部的View
    private XListViewHeader mHeaderView;
    // 查看头部的内容,用它计算头部高度,和隐藏它
    // 当禁用的时候刷新
    private RelativeLayout mHeaderViewContent;
    private TextView mHeaderTimeView;
    private int mHeaderViewHeight; // 头部View的高
    private boolean mEnablePullRefresh = true;
    private boolean mPullRefreshing = false; // 是否刷新.
    // -- 底部的View
    private XListViewFooter mFooterView;
    private boolean mEnablePullLoad;
    private boolean mPullLoading;
    private boolean mIsFooterReady = false;
    // 总列表项,用于检测列表视图的底部
    private int mTotalItemCount;

    // for mScroller, 滚动页眉或者页脚
    private int mScrollBack;
    private final static int SCROLLBACK_HEADER = 0;// 顶部
    private final static int SCROLLBACK_FOOTER = 1;// 下部

    private final static int SCROLL_DURATION = 400; // 滚动回时间
    private final static int PULL_LOAD_MORE_DELTA = 50; // 当大于50PX的时候,加载更多

    private final static float OFFSET_RADIO = 1.8f; // support iOS like pull
    // feature.

    /**
     * @param context
     */
    public XListView(Context context) {
        super(context);
        initWithContext(context);
    }

    public XListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initWithContext(context);
    }

    public XListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initWithContext(context);
    }

    private void initWithContext(Context context) {
        mScroller = new Scroller(context, new DecelerateInterpolator());
        // XListView need the scroll event, and it will dispatch the event to
        // user's listener (as a proxy).
        super.setOnScrollListener(this);

        // 初始化头部View
        mHeaderView = new XListViewHeader(context);
        mHeaderViewContent = (RelativeLayout) mHeaderView
                .findViewById(R.id.xlistview_header_content);
        mHeaderTimeView = (TextView) mHeaderView
                .findViewById(R.id.xlistview_header_time);
        addHeaderView(mHeaderView);// 把头部这个视图添加进去

        // 初始化底部的View
        mFooterView = new XListViewFooter(context);

        // 初始化头部高度
        mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                mHeaderViewHeight = mHeaderViewContent.getHeight();
                getViewTreeObserver()
                        .removeGlobalOnLayoutListener(this);
            }
        });


    }

    @Override
    public void setAdapter(ListAdapter adapter) {
        // 确定XListViewFooter是最后底部的View, 并且只有一次
        if (mIsFooterReady == false) {
            mIsFooterReady = true;
            addFooterView(mFooterView);
        }
        super.setAdapter(adapter);
    }

    /**
     * 启用或禁用下拉刷新功能.
     *
     * @param enable
     */
    public void setPullRefreshEnable(boolean enable) {
        mEnablePullRefresh = enable;
        if (!mEnablePullRefresh) { // 禁用,隐藏内容
            mHeaderViewContent.setVisibility(View.INVISIBLE);// 如果为false则隐藏下拉刷新功能
        } else {
            mHeaderViewContent.setVisibility(View.VISIBLE);// 否则就显示下拉刷新功能
        }
    }

    /**
     * 启用或禁用加载更多的功能.
     *
     * @param enable
     */
    public void setPullLoadEnable(boolean enable) {
        mEnablePullLoad = enable;
        if (!mEnablePullLoad) {
            mFooterView.hide();// 隐藏
            mFooterView.setOnClickListener(null);
        } else {
            mPullLoading = false;
            mFooterView.show();// 显示
            mFooterView.setState(XListViewFooter.STATE_NORMAL);
            // both "上拉" 和 "点击" 将调用加载更多.
            mFooterVie
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值