• Irecycleview 的初次使用简单介绍(irecycleview 下拉刷新上拉加载)


    导包 还得加一个maven地址自己也看一下作者git把有详细解释(自己也要导入recycleview的包)

    我的例子下载地址  https://www.lanzous.com/i32yzaj

    implementation 'com.github.Aspsine:IRecyclerView:0.0.7'

    其实简单用法很简单 导包后 activity 和fragment 都可以  implements OnRefreshListener,OnLoadMoreListener  实现其中的方法loadmore refrash就行是我想复杂了【但是对于上拉刷新要setRefreshEnabled(true);和设置刷新的头部view 我以为作者在包里面封装了,后来发现并没封装 这个头部也是要自己写的吧 尾部也是......不知到是不是我理解错了 作者例子里也不是很详细 没有默认的封装好的 】

    我的简单例子图片

    我掉的坑就是设置头部和尾部view,以为不设置会有默认的其实没有  ,第二个 copy作者的xml文件和那个头部和尾部view类 xml文件出错

    layout_irecyclerview_load_more_footer.xml

    <com.stdu.LoadMoreFooterView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="48dp"/>
    
    com.stdu.LoadMoreFooterView 这个要是你的类路径 直接copy作者的弄了一会
    

      其他的就很简单

    上Mainactivity代码

    public class MainActivity extends AppCompatActivity implements  OnRefreshListener,OnLoadMoreListener{
        List<Teacher> list;
        IRecyclerView view;
        TeacherAdapter1 adapter;
        LoadMoreFooterView loadMoreFooterView;
        int num=1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initList();
            view = findViewById(R.id.view);
            loadMoreFooterView= (LoadMoreFooterView) view.getLoadMoreFooterView();
            view.setLayoutManager(new LinearLayoutManager(this));
            initRefreshView();//初始化刷新
            initLoadMoreView();//初始化加载更多
            adapter = new TeacherAdapter1(R.layout.item,list);//TeacherAdapter(this,list);
            adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
                @Override
                public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                    Toast.makeText(MainActivity.this,"哈哈"+position,Toast.LENGTH_SHORT).show();
                }
            });
            view.setIAdapter(adapter);
    //注意setIAdapter 中间有个I
    
    
        }
    
    
        private void initRefreshView() {
            view.setRefreshEnabled(true);
           // System.out.println("initRefreshView------------------");
            //这两个类是直接从作者哪里八下来的 我发现作者没提供默认样式..........是我没找到错了码?
            ClassicRefreshHeaderView classicRefreshHeaderView = new ClassicRefreshHeaderView(this);
            classicRefreshHeaderView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,80 ));
            view.setRefreshHeaderView(classicRefreshHeaderView);
            view.setOnRefreshListener(this);
        }
    
    
        private void initLoadMoreView()
        {
            view.setOnLoadMoreListener(this);
            view.setLoadMoreEnabled(true);
            view.setOnLoadMoreListener(this);
        }
    
    
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    view.setRefreshing(false);
                }
            },2000);
        }
    
    //初始化载入的list
        private void initList() {
            list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                list.add(new Teacher(R.mipmap.ic_launcher,"teacher "+i));
            }
        }
    
    
    
        @Override
        public void onLoadMore() {
            num++; //模拟假数据如果num<3则请求到了数据
            loadMoreFooterView.setStatus(LoadMoreFooterView.Status.LOADING);//向上滑动就显示loading 界面
            if(num<=3) {
    
                new Handler().postDelayed(new Runnable() {
                    @Override//延迟两秒执行
                    public void run() {
                        //模拟网上得到数据封装成list
                        for (int i = 0; i < 10; i++) {
                            list.add(new Teacher(R.mipmap.ic_launcher, "第二次加载 " + i));
                        }
                        //System.out.println("载入其他数据");
                        loadMoreFooterView.setStatus(LoadMoreFooterView.Status.GONE);//得到数据loading界面消失
    
                    }
                },2000);
    
            }else
                {
                loadMoreFooterView.setStatus(LoadMoreFooterView.Status.THE_END);//数据加载完
            }
    
        }
    
    
    
        }
    View Code
    TeacherAdapter1 代码 (这个老师的例子是看的网上一个例子睡了一晚百度了一下没找着,这个TeacherAdapter1 是我自己写的哈不存在抄袭)
    public class TeacherAdapter1 extends BaseQuickAdapter<Teacher, BaseViewHolder> {
        List<Teacher> list;
        Context context;
    
        public TeacherAdapter1(int layoutResId, @Nullable List<Teacher> data) {
            super(layoutResId, data);
        }
    
        @Override
        protected void convert(BaseViewHolder helper, Teacher item) {
         helper.addOnClickListener(R.id.image);
         helper.setText(R.id.text,item.getName());
         helper.setImageResource(R.id.image,item.getId());
    
    
        }
    }
    View Code
    ClassicRefreshHeaderView  作者的直接copy
    package com.stdu;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    import com.aspsine.irecyclerview.RefreshTrigger;
    public class ClassicRefreshHeaderView extends RelativeLayout implements RefreshTrigger {
        private ImageView ivArrow;
    
        private ImageView ivSuccess;
    
        private TextView tvRefresh;
    
        private ProgressBar progressBar;
    
        private Animation rotateUp;
    
        private Animation rotateDown;
    
        private boolean rotated = false;
    
        private int mHeight;
    
        public ClassicRefreshHeaderView(Context context) {
            this(context, null);
        }
    
        public ClassicRefreshHeaderView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public ClassicRefreshHeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
    
            inflate(context, R.layout.layout_irecyclerview_classic_refresh_header_view, this);
    
            tvRefresh = (TextView) findViewById(R.id.tvRefresh);
    
            ivArrow = (ImageView) findViewById(R.id.ivArrow);
    
            ivSuccess = (ImageView) findViewById(R.id.ivSuccess);
    
            progressBar = (ProgressBar) findViewById(R.id.progressbar);
    
            rotateUp = AnimationUtils.loadAnimation(context, R.anim.rotate_up);
    
            rotateDown = AnimationUtils.loadAnimation(context, R.anim.rotate_down);
        }
    
        @Override
        public void onStart(boolean automatic, int headerHeight, int finalHeight) {
            this.mHeight = headerHeight;
            progressBar.setIndeterminate(false);
        }
    
        @Override
        public void onMove(boolean isComplete, boolean automatic, int moved) {
            if (!isComplete) {
                ivArrow.setVisibility(VISIBLE);
                progressBar.setVisibility(GONE);
                ivSuccess.setVisibility(GONE);
                if (moved <= mHeight) {
                    if (rotated) {
                        ivArrow.clearAnimation();
                        ivArrow.startAnimation(rotateDown);
                        rotated = false;
                    }
    
                    tvRefresh.setText("下拉刷新");
                } else {
                    tvRefresh.setText("释放刷新");
                    if (!rotated) {
                        ivArrow.clearAnimation();
                        ivArrow.startAnimation(rotateUp);
                        rotated = true;
                    }
                }
            }
        }
    
        @Override
        public void onRefresh() {
            ivSuccess.setVisibility(GONE);
            ivArrow.clearAnimation();
            ivArrow.setVisibility(GONE);
            progressBar.setVisibility(VISIBLE);
            tvRefresh.setText("刷新中..");
        }
    
        @Override
        public void onRelease() {
    
        }
    
        @Override
        public void onComplete() {
            rotated = false;
            ivSuccess.setVisibility(VISIBLE);
            ivArrow.clearAnimation();
            ivArrow.setVisibility(GONE);
            progressBar.setVisibility(GONE);
            tvRefresh.setText("刷新成功");
        }
    
        @Override
        public void onReset() {
            rotated = false;
            ivSuccess.setVisibility(GONE);
            ivArrow.clearAnimation();
            ivArrow.setVisibility(GONE);
            progressBar.setVisibility(GONE);
        }
    }
    View Code
    LoadMoreFooterView 作者的直接copy
    package com.stdu;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.FrameLayout;
    
    public class LoadMoreFooterView extends FrameLayout {
    
        private Status mStatus;
    
        private View mLoadingView;
    
        private View mErrorView;
    
        private View mTheEndView;
    
        private OnRetryListener mOnRetryListener;
    
        public LoadMoreFooterView(Context context) {
            this(context, null);
        }
    
        public LoadMoreFooterView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public LoadMoreFooterView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            LayoutInflater.from(context).inflate(R.layout.layout_irecyclerview_load_more_footer_view, this, true);
    
            mLoadingView = findViewById(R.id.loadingView);
            mErrorView = findViewById(R.id.errorView);
            mTheEndView = findViewById(R.id.theEndView);
    
            mErrorView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mOnRetryListener != null) {
                        mOnRetryListener.onRetry(LoadMoreFooterView.this);
                    }
                }
            });
    
            setStatus(Status.GONE);
        }
    
        public void setOnRetryListener(OnRetryListener listener) {
            this.mOnRetryListener = listener;
        }
    
        public Status getStatus() {
            return mStatus;
        }
    
        public void setStatus(Status status) {
            this.mStatus = status;
            change();
        }
    
        public boolean canLoadMore() {
            return mStatus == Status.GONE || mStatus == Status.ERROR;
        }
    
        private void change() {
            switch (mStatus) {
                case GONE:
                    mLoadingView.setVisibility(GONE);
                    mErrorView.setVisibility(GONE);
                    mTheEndView.setVisibility(GONE);
                    break;
    
                case LOADING:
                    mLoadingView.setVisibility(VISIBLE);
                    mErrorView.setVisibility(GONE);
                    mTheEndView.setVisibility(GONE);
                    break;
    
                case ERROR:
                    mLoadingView.setVisibility(GONE);
                    mErrorView.setVisibility(VISIBLE);
                    mTheEndView.setVisibility(GONE);
                    break;
    
                case THE_END:
                    mLoadingView.setVisibility(GONE);
                    mErrorView.setVisibility(GONE);
                    mTheEndView.setVisibility(VISIBLE);
                    break;
            }
        }
    
        public enum Status {
            GONE, LOADING, ERROR, THE_END
        }
    
        public interface OnRetryListener {
            void onRetry(LoadMoreFooterView view);
        }
    
    }
    View Code

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <com.aspsine.irecyclerview.IRecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:loadMoreEnabled="true"
        app:loadMoreFooterLayout="@layout/layout_irecyclerview_load_more_footer"
        app:refreshEnabled="true"
    
         />

    不想贴代码了大家直接下载例子 吧也是我自己学习的记录  



     
  • 相关阅读:
    SQL_Server_2005_启用远程连接
    Oracle外网或内网远程连接
    还原数据库到指定时间点
    SQL Server账号密码(sa)登录失败 错误原因:18456
    sql server如何设置密码过期时间呢?
    安装SQL Server2014 :规则”Windows Management Instrumentation (WMI)服务 “失败
    impala
    dolphinscheduler
    829. Consecutive Numbers Sum 连续的数字求和
    472. Concatenated Words 查找自己拼出来的单词 反向word break
  • 原文地址:https://www.cnblogs.com/xuexidememeda/p/10353792.html
Copyright © 2020-2023  润新知