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

来源:互联网 发布:好用的旅游软件知乎 编辑:程序博客网 时间:2024/05/21 10:16

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实现自动刷新
基本流程就是这样的,具体使用可以参照我的类。自我感觉还比较好用。

1 0
原创粉丝点击