下拉刷新SwipeRefreshLayout(加入上拉加载更多)

google官方的下拉刷新SwipeRefreshLayout还是比较好用的。使用起来也相当简单,但是唯一美中不足的就是没有上拉加载更多。下面就来记录下SwipeRefreshLayout和上拉加载更多。
添加依赖:

compile 'cn.finalteam.loadingviewfinal:swipe-refresh-layout:1.0.1'

忘记在那里看到的这个库了,只是记录用法。
在xml中布局

<?xml version="1.0" encoding="utf-8"?>
<cn.finalteam.loadingviewfinal.SwipeRefreshLayoutFinal
    android:id="@+id/refresh_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:refreshLoadingColor="@color/colorPrimary"><!--设置loading颜色-->
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F5F5F5"
   >


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#f6f6f6"
        />
    <com.prosland.juehuo.view.MyListViewLoadMore
        android:id="@+id/share_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/title"
        android:divider="@null"
        android:scrollbars="none"
        android:listSelector="#00000000"
        android:layout_margin="12dp"
        ></com.prosland.juehuo.view.MyListViewLoadMore>

</RelativeLayout>
</cn.finalteam.loadingviewfinal.SwipeRefreshLayoutFinal>

创建MyListViewLoadMore类:

package com.prosland.juehuo.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;

import com.prosland.juehuo.R;

/**
 * 自定义listview 加上加载更多 的footview
 * Created by vip on 2016/7/5.
 */
public class MyListViewLoadMore extends ListView implements AbsListView.OnScrollListener {

    View footView;
    int totalCount;
    int last;
    boolean isLoading = false;
    Context context;
    private OnScrollListener onScrollListener;

    public MyListViewLoadMore(Context context) {
        super(context);
        this.context = context;
    }

    public MyListViewLoadMore(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public MyListViewLoadMore(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
    }

    public void initView() {
        LayoutInflater inflater = LayoutInflater.from(context);
        if (footView == null) {
            footView = inflater.inflate(R.layout.foot_layout, null);
            this.addFooterView(footView);
        }
        this.setOnScrollListener(this);
    }

    @Override
    public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
        this.last = arg1 + arg2;
        this.totalCount = arg3;
        if (onScrollListener != null) {
            onScrollListener.onScroll(arg1);
        }
    }

    // 滑动监听
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {
        if (iLoadListener != null) {
            if (totalCount == last && arg1 == SCROLL_STATE_IDLE) {
                if (!isLoading) {
                    isLoading = true;
                    if(footView!=null){
                        footView.findViewById(R.id.foot_layout).setVisibility(View.VISIBLE);
                    }
                    iLoadListener.onLoad();
                }
            }
        }
    }

    public void remoView() {
        if (footView != null) {
            isLoading = true;
            this.removeFooterView(footView);
        }
    }

    public void addView() {
        if (footView != null) {
            isLoading = false;
            this.addFooterView(footView);
        }
    }
public View getFootView(){
    return  footView;
}
    ILoadListener iLoadListener;

    // 设置监听
    public void setLoadListener(ILoadListener iLoadListener) {
        this.iLoadListener = iLoadListener;
    }

    public void gong(){
        footView.setVisibility(View.GONE);
    }
    public void visibility(){
        footView.setVisibility(View.VISIBLE);
    }

    // 定义回掉接口
    public interface ILoadListener {
        public void onLoad();
    }

    // 加载完成的。
    public void onLoadMoreComplete() {
        isLoading = false;
        if (footView != null)
            footView.findViewById(R.id.foot_layout).setVisibility(View.GONE);
        this.setOnScrollListener(this);
    }

    boolean b_gun = false;

    // 设置 是否 滚动
    public void setGun(boolean gun) {
        b_gun = true;
    }


    /**
     * 设置滚动接口
     *
     * @param onScrollListener
     */
    public void setOnScrollListener(OnScrollListener onScrollListener) {
        this.onScrollListener = onScrollListener;
    }

    /**
     * 滚动的回调接口
     */
    public interface OnScrollListener {
        /**
         * 回调方法, 返回MyScrollView滑动的Y方向距离
         */
        public void onScroll(int firstVisibleItem);

    }

//    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        if (b_gun) {
//            int expandSpec = MeasureSpec.makeMeasureSpec(
//                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
//            super.onMeasure(widthMeasureSpec, expandSpec);
//        } else {
//            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//        }
//    }
}
在Activity中使用:
package com.prosland.juehuo.safety;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ContentView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.bean.ImageItem;
import com.prosland.juehuo.AppApplication;
import com.prosland.juehuo.BaseActivity;
import com.prosland.juehuo.R;
import com.prosland.juehuo.adapter.base.BaseViewHolderAdapter;
import com.prosland.juehuo.bean.Entity;
import com.prosland.juehuo.bean.message.EntityObject;
import com.prosland.juehuo.bean.safe.Contents;
import com.prosland.juehuo.bean.safe.ImageInfo;
import com.prosland.juehuo.bean.safe.ShareItemBo;
import com.prosland.juehuo.bean.safe.ShareSafeList;
import com.prosland.juehuo.bean.safe.ShareSafeListInfo;
import com.prosland.juehuo.utils.AndroidUtils;
import com.prosland.juehuo.utils.Constants;
import com.prosland.juehuo.utils.DateUtil;
import com.prosland.juehuo.utils.Global;
import com.prosland.juehuo.utils.LogUtils;
import com.prosland.juehuo.utils.MyHttputils;
import com.prosland.juehuo.utils.ToastUtils;
import com.prosland.juehuo.view.MyListViewLoadMore;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.finalteam.loadingviewfinal.SwipeRefreshLayoutFinal;

/**
 * 分享安全经验
 */
@ContentView(R.layout.activity_share_safe)
public class ShareSafeActivity extends BaseActivity implements View.OnClickListener, MyListViewLoadMore.ILoadListener, MyListViewLoadMore.OnScrollListener {
    @ViewInject(R.id.share_listview)
    private MyListViewLoadMore mListView;
    @ViewInject(R.id.textview_title)
    private TextView titleContent;
    @ViewInject(R.id.textview_back)
    private TextView mback;
    private ShareSafeAdapter adapter;
    private List<ShareSafeList> list = new ArrayList<>();
    private ShareItemBo shareItemBo;
    private List<Contents> contentList = new ArrayList<>();
    @ViewInject(R.id.refresh_layout)
    private SwipeRefreshLayoutFinal refresh_layout;
    private int mPage = 1;
    private String titleImageBg = "";
    private ArrayList<ImageInfo> imageList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ViewUtils.inject(this);
        initView();
        titleContent.setText("分享安全经验");
        mListView.initView();
        adapter = new ShareSafeAdapter(this, list, R.layout.share_safe_listview_item);
        mListView.setAdapter(adapter);
        setSwipeRefreshInfo();
    }

    private void setSwipeRefreshInfo() {
        //下拉刷新
        refresh_layout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                requestList(1);
            }
        });
        mListView.setLoadListener(this);
        mListView.initView();
        refresh_layout.autoRefresh();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (AppApplication.shareSafe) {
            setSwipeRefreshInfo();
        }
    }

    //上拉加载
    @Override
    public void onLoad() {
        requestList(mPage);
    }

    /**
     * 请求列表
     */
    private void requestList(final int page) {
        String url = "experience/getMyExp";
        Map<String, String> map = new HashMap<>();
        map.put("page", page + "");
        map.put("page_size", "20");
        isShowDialog = false;
        MyHttputils.getInstance(ShareSafeActivity.this).get2(ShareSafeActivity.this, url, map, new Entity<ShareSafeListInfo>() {
            @Override
            public void onSuccess(ShareSafeListInfo object) {
                LogUtils.d("分享列表============" + object.toString());
                if (page == 1) {
                    list.clear();
                    refresh_layout.onRefreshComplete();
                } else {
                    mListView.onLoadMoreComplete();
                }
                mPage = page + 1;
                list.addAll(object.getList());
                initData(list);
                if (object.getList().size() < 20) {
                    mListView.setLoadListener(null);
                    mListView.remoView();
//                    ToastUtils.toast(ShareSafeActivity.this, "已没有更多数据");
                } else {
                    mListView.setLoadListener(ShareSafeActivity.this);
                    if (mListView.getFooterViewsCount() == 0) {
                        mListView.addView();
                    }
                }
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Object object) {
                refresh_layout.onRefreshComplete();
            }
        });

    }

    private void initData(final List<ShareSafeList> list) {

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int status = -1;
                if (position != 0) {
                    status = list.get(position - 1).getStatus();
                }
                LogUtils.d("position-=================" + (position - 1));
                ShareSafeList exp;
                if (position == 0) {
                    exp = list.get(0);
                } else {
                    exp = list.get(position - 1);
                }
                int experiemceShareId = exp.getExperienceShareId();
                LogUtils.d("experiemceShareId===" + experiemceShareId);
                if (status == 0) {
                    //请求
                    requestItem(experiemceShareId, position, exp.getBgImg(), exp.getShareName());
                } else if (status == 1 || status == 2 || status == 3||status==4) {//1私密2审核中 3公开 4不通过
                    LogUtils.d("分享的title======"+exp.getShareName());
                    Intent intent = new Intent(ShareSafeActivity.this, ShareDetailsActivity.class);
                    intent.putExtra(ShareDetailsActivity.ACTION_DISCUSS_TIMES, exp.getDiscussTimes());
                    intent.putExtra(ShareDetailsActivity.ACTION_THUMBS_TIMES, exp.getThumbsTimes());
                    intent.putExtra(ShareDetailsActivity.ACTION_EXPERIENCE_SHARE_ID, experiemceShareId);
                    intent.putExtra(ShareDetailsActivity.ACTION_EXPERIENCE_SHARE_TITLE, exp.getShareName());
                    intent.putExtra("type", "sharesafe");
                    intent.putExtra(Global.share_status, status);
                    startActivity(intent);
                }
            }

        });
    }

    /**
     * 请求单个
     *
     * @param
     */
    private void requestItem(int id, final int position, final String bgImage, String shareName) {
        String url = "experience/getContent";
        Map<String, String> map = new HashMap<>();
        map.put("experienceShareId", id + "");
        final ArrayList<ImageInfo> images = new ArrayList<ImageInfo>();
        MyHttputils.getInstance(context).get4(context, url, map, new EntityObject() {
            @Override
            public void onSuccess(Object object) {
                shareItemBo = (ShareItemBo) object;
                String json = shareItemBo.getContent();
                Gson gson = new Gson();
                //将json格式转化成javabean
                Object results = gson.fromJson(json, new TypeToken<List<Contents>>() {
                }.getType());
                contentList = (List<Contents>) results;
                LogUtils.d("点击单个返回==========" + object.toString());
                dismissDialog();
                for (int i = 0; i < contentList.size(); i++) {
                    ImageInfo item = new ImageInfo(contentList.get(i).getImg(), contentList.get(i).getText());
                    images.add(item);
                }
                String shareName = list.get(position - 1).getShareName();//标题
                int experiemceShareId = list.get(position - 1).getExperienceShareId();
                Intent intent = new Intent(ShareSafeActivity.this, EditShareActivity.class);
                intent.putExtra("photo_list", images);
                intent.putExtra("status", "item");
                intent.putExtra("shareName", shareName);
                intent.putExtra("titleImageBg", bgImage);
                intent.putExtra("shareName", shareName);
                intent.putExtra("experiemceShareId", experiemceShareId);
                startActivityForResult(intent, EDIT_IMAGE);
            }

            @Override
            public void onFailure(Object object) {
                dismissDialog();
            }
        });


    }

    private void initView() {
        //添加listView头部
        View headerView = View.inflate(this, R.layout.share_safe_list_head, null);
        mListView.addHeaderView(headerView);
        ImageView add_image = (ImageView) headerView.findViewById(R.id.add_image);
        TextView find_activity_detail = (TextView) headerView.findViewById(R.id.find_activity_detail);
        add_image.setOnClickListener(this);
        find_activity_detail.setOnClickListener(this);
        mback.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.find_activity_detail://查看活动详情
//                ToastUtils.toast(this, "查看活动详情");
                Intent intent = new Intent(this, ActivityDetailActivity.class);
                startActivity(intent);

                break;
            case R.id.add_image://选择照片
                chooseImage(CHOOSE_PHOTO);
                break;
            case R.id.textview_back://返回
                finish();
                break;
        }
    }


    @Override
    public void onScroll(int firstVisibleItem) {

    }

    private class ShareSafeAdapter extends BaseViewHolderAdapter<ShareSafeList> {
        public ShareSafeAdapter(Context context, List<ShareSafeList> data, int layoutRes) {
            super(context, data, layoutRes);
        }

        @Override
        protected void bindData(int pos, ShareSafeList itemData) {
            TextView share_type = getViewFromHolder(R.id.share_type);//类型  草稿
            TextView title = getViewFromHolder(R.id.text_basis_safety);//标题  用电常识
            TextView time = getViewFromHolder(R.id.share_time);
            TextView zan_number = getViewFromHolder(R.id.zan_number);//点赞数
            TextView comment_number = getViewFromHolder(R.id.comment_number);//评论数
            TextView find_number = getViewFromHolder(R.id.find_number);//浏览数
            TextView agree = getViewFromHolder(R.id.agree);//已采纳
            TextView review = getViewFromHolder(R.id.review);//审核中
            TextView no_agree = getViewFromHolder(R.id.no_agree);//未通过
            TextView secret = getViewFromHolder(R.id.secret);//私密
            ImageView rl_share_safe = getViewFromHolder(R.id.share_safe_img);//布局
            //加载本地图片
            Glide.with(ShareSafeActivity.this)
                    .load(Constants.SERVER_IMAGE_ADDRESS + itemData.getBgImg() + "&width=" + AndroidUtils.getScreenSize(context, 1) / 2)
                    .into(rl_share_safe);
            share_type.setVisibility(View.VISIBLE);
            agree.setVisibility(View.VISIBLE);
            review.setVisibility(View.VISIBLE);
            no_agree.setVisibility(View.VISIBLE);
            secret.setVisibility(View.VISIBLE);
            zan_number.setText(itemData.getThumbsTimes() + "");
            comment_number.setText("" + itemData.getDiscussTimes());
            find_number.setText("" + itemData.getReadTimes());
            title.setText(itemData.getShareName() + "");
            String timeStr = DateUtil.getDateString(itemData.getCreateTime());
            time.setText("" + timeStr);

            if (itemData.getAccept() == 0) {
                agree.setVisibility(View.GONE);
            } else {
                agree.setVisibility(View.VISIBLE);
            }
            switch (itemData.getStatus()) {//状态:0草稿 1私密 2审核中 3公开 4不通过
                case 0:
                    share_type.setVisibility(View.VISIBLE);
                    secret.setVisibility(View.GONE);
                    review.setVisibility(View.GONE);
                    no_agree.setVisibility(View.GONE);
                    agree.setVisibility(View.GONE);
                    break;
                case 1:
                    share_type.setVisibility(View.GONE);
                    secret.setVisibility(View.GONE);
                    review.setVisibility(View.GONE);
                    no_agree.setVisibility(View.GONE);
                    agree.setVisibility(View.GONE);
                    break;
                case 2:
                    share_type.setVisibility(View.GONE);
                    secret.setVisibility(View.GONE);
                    review.setVisibility(View.VISIBLE);
                    no_agree.setVisibility(View.GONE);
                    agree.setVisibility(View.GONE);
                    break;
                case 3:
                    share_type.setVisibility(View.GONE);
                    secret.setVisibility(View.GONE);
                    review.setVisibility(View.GONE);
                    no_agree.setVisibility(View.GONE);
                    agree.setVisibility(View.GONE);
                    break;
                case 4:
                    share_type.setVisibility(View.GONE);
                    secret.setVisibility(View.GONE);
                    review.setVisibility(View.GONE);
                    no_agree.setVisibility(View.VISIBLE);
                    agree.setVisibility(View.GONE);
                    break;
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {//选择多张照片
            if (data != null && requestCode == IMAGE_PICKER) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                List<String> listPath = new ArrayList<String>();
                imageList.clear();
                File file;
                for (int i = 0; i < images.size(); i++) {
//                    images.get(i).path = BitmapHelper.compressBitmap(context, images.get(i).path, Global.CROP_WIDTH, Global.CROP_HEIGHT, true);
                    //压缩图片
                    file = new File(images.get(i).path);
                    Log.d("返回的图片大小", file.length() + "" + "选择的图片=======" + images.get(i).path);
                    if (file.length() > 0) {
                        images.get(i).path = compressPath(images.get(i).path).getAbsolutePath();
                        Log.d("返回的图片", images.get(i).path + "图片的大小" + new File(images.get(i).path).length());
                    } else {
                        images.get(i).path = "";
                    }
                }
                //将file大小等于0的字节过滤出来
                for (ImageItem item : images) {
                    if (!"".equals(item.path)) {
                        imageList.add(new ImageInfo(item.path, ""));
                    }
                }
//                Message message = mHandleres.obtainMessage();
//                message.what = 0;
//                message.obj = images;
//                mHandleres.sendMessage(message);
                if (images.size() <= 0) {
                    ToastUtils.toast(ShareSafeActivity.this, "图片读取失败");
                    return;
                }
                Intent intent = new Intent(ShareSafeActivity.this, EditShareActivity.class);
                intent.putExtra("photo_list", imageList);
                intent.putExtra("status", "list");
                intent.putExtra("shareName", "");
                intent.putExtra("experiemceShareId", -1);
//                if (loadDialog.isShowing() && loadDialog != null) {
//                    dismissDialog();
//                }
                startActivityForResult(intent, EDIT_IMAGE);
            }
        }
        if (resultCode == RESULT_OK) {
            if (requestCode == EDIT_IMAGE) {
                requestList(1);
            }
        }

    }

    private android.os.Handler mHandleres = new android.os.Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) msg.obj;
                Intent intent = new Intent(ShareSafeActivity.this, EditShareActivity.class);
                intent.putExtra("photo_list", images);
                intent.putExtra("status", "list");
                intent.putExtra("shareName", "");
                intent.putExtra("experiemceShareId", -1);
                startActivityForResult(intent, EDIT_IMAGE);
            }
        }
    };
}

这个是我项目中的一个类,需要自己根据自己的不同的情况更改。基本使用如下:
1.创建activity实现MyListViewLoadMore.ILoadListener, MyListViewLoadMore.OnScrollListener接口
2.重写onLoad(),onScroll()方法
3.通过setOnRefreshListener接口实现onRefresh()下拉刷新的方法
4.监听setLoadListener
5.autoRefresh实现自动刷新
基本流程就是这样的,具体使用可以参照我的类。自我感觉还比较好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值