recyclerview简单使用

(1)将recyclerview导入到项目中

android studio:

在dependencies{中添加

compile 'com.android.support:recyclerview-v7:21.+'


(2)SwipeRefreshLayout下拉刷新

SwipeRefrshLayoutGoogle官方更新的一个Widget,可以实现下拉刷新的效果。该控件集成自ViewGroup在support-v4兼容包下,不过我们需要升级supportlibrary的版本到19.1以上。基本使用的方法如下:

  • setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器
  • setRefreshing(boolean):显示或者隐藏刷新进度条
  • isRefreshing():检查是否处于刷新状态
  • setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。
(3) RecyclerView + Swpie RefreshLayout 实现下拉刷新效果 :

       1.SwipeRefreshLayout本身自带下拉刷新的效果,那么我们可以选择在RecyclerView布局外部嵌套一层SwipeRefreshLayout布局即可,具体布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.recycleview.MainActivity">
    <include layout="@layout/common_top_bar_layout"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/demo_swiperefreshlayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scrollbars="vertical"
            >
            <android.support.v7.widget.RecyclerView
                android:id="@+id/demo_recycler"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                ></android.support.v7.widget.RecyclerView>
        </android.support.v4.widget.SwipeRefreshLayout>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>
下拉刷新监听代码如下

/**
         * 上拉刷新
         */
        mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Log.d("zttjiangqq","invoke onRefresh...");
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        List<Recycler> newDatas = new ArrayList<Recycler>();
                        int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
                        for (int i = 0; i <image.length; i++) {
                            newDatas.add(new Recycler(image[i],"上拉刷新数据","2015-7-29 15:3" + i));
                        }
                        mAdapter.addItem(newDatas);
                        mSwipeRefresh.setRefreshing(false);
                        Toast.makeText(MainActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show();
                    }
                }, 5000);
            }


        });
(4) Recycler View 设置滚动事件加入上拉加载更多功能

/**
         * 下拉加载
         */
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==mAdapter.getItemCount()) {
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            List<Recycler> newDatas = new ArrayList<Recycler>();
                            int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
                            for (int i = 0; i <image.length; i++) {
                                newDatas.add(new Recycler(image[i],"下拉加载数据","2015-7-29 15:3" + i));
                            }
                            mAdapter.addMoreItem(newDatas);
                            Toast.makeText(MainActivity.this, "加载了五条数据...", Toast.LENGTH_SHORT).show();
                        }
                    },1000);
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                lastVisibleItem =manager.findLastVisibleItemPosition();
            }
        });

    }
好了,看下整体项目的源码

实体类Recycler.java

package com.example.recycleview;

import android.media.Image;

import java.io.Serializable;

/**
 * Created by 付刚 on 2017/11/21.
 */

public class Recycler implements Serializable{
    private int imageId;
    private String title;
    private String time;
    public Recycler(int imageId, String title, String time) {
        super();
        this.imageId = imageId;
        this.title = title;
        this.time = time;
    }
    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

}



MainActivity.java

package com.example.recycleview;

import android.app.ProgressDialog;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


import static com.example.recycleview.R.id.demo_swiperefreshlayout;

public class MainActivity extends AppCompatActivity {
    private SwipeRefreshLayout mSwipeRefresh;
    private HomeAdapter mAdapter;
    private RecyclerView recyclerView;
    private LinearLayoutManager manager;
    private LinearLayout line;
    private TextView tv;


    private ProgressDialog pd;
    private List<Recycler> list;
    private int lastVisibleItem;

    /**
     * 图片id
     */
    private int[] imageId;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();//初始化控件
        initData();//初始化数据
        setListener();//设置监听事件
    }

    private void setListener() {
        /**
         * 上拉刷新
         */
        mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Log.d("zttjiangqq","invoke onRefresh...");
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        List<Recycler> newDatas = new ArrayList<Recycler>();
                        int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
                        for (int i = 0; i <image.length; i++) {
                            newDatas.add(new Recycler(image[i],"上拉刷新数据","2015-7-29 15:3" + i));
                        }
                        mAdapter.addItem(newDatas);
                        mSwipeRefresh.setRefreshing(false);
                        Toast.makeText(MainActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show();
                    }
                }, 5000);
            }


        });
        /**
         * 下拉加载
         */
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==mAdapter.getItemCount()) {
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            List<Recycler> newDatas = new ArrayList<Recycler>();
                            int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
                            for (int i = 0; i <image.length; i++) {
                                newDatas.add(new Recycler(image[i],"下拉加载数据","2015-7-29 15:3" + i));
                            }
                            mAdapter.addMoreItem(newDatas);
                            Toast.makeText(MainActivity.this, "加载了五条数据...", Toast.LENGTH_SHORT).show();
                        }
                    },1000);
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                lastVisibleItem =manager.findLastVisibleItemPosition();
            }
        });

    }

    private void initData() {
        // 1.获取图片的数据
        imageId = new int[] { R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,R.mipmap.ic_launcher ,R.mipmap.ic_launcher  };
        list = new ArrayList<Recycler>();
        for (int i = 0; i < imageId.length; i++) {
            list.add(new Recycler(imageId[i], "羊信息", "2015-7-29 15:3" + i));
        }
        tv.setText("RecyclerView下拉刷新,下拉加载更多...");
        mSwipeRefresh.setProgressBackgroundColorSchemeResource(android.R.color.white);
        mSwipeRefresh.setColorSchemeResources(android.R.color.holo_blue_light,
                android.R.color.holo_red_light,android.R.color.holo_orange_light,
                android.R.color.holo_green_light);
        mSwipeRefresh.setProgressViewOffset(false, 0, (int) TypedValue
                .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()
                        .getDisplayMetrics()));

        manager=new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);

        mAdapter=new HomeAdapter(list);
        recyclerView.setAdapter(mAdapter);
        mAdapter.notifyDataSetChanged();
    }

    private void initViews() {
        mSwipeRefresh= (SwipeRefreshLayout) findViewById(demo_swiperefreshlayout);
        recyclerView= (RecyclerView) findViewById(R.id.demo_recycler);
        tv= (TextView) findViewById(R.id.top_bar_title);
        line= (LinearLayout) findViewById(R.id.top_bar_linear_back);

    }


}
适配器HomeAdapter.java

package com.example.recycleview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by fg on 2017/11/21.
 */

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder>{
    private List<Recycler> list;
    public HomeAdapter(List<Recycler> list) {
        this.list = list;

    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,null);
        ViewHolder vh=new ViewHolder(view);
        vh.recycler_item_image=view.findViewById(R.id.photo);
        vh.recycler_item_name=view.findViewById(R.id.name);
        vh.recycler_item_time=view.findViewById(R.id.time);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Recycler rc = list.get(position);
        holder.recycler_item_image.setImageResource(rc.getImageId());
        holder.recycler_item_name.setText(rc.getTitle());
        holder.recycler_item_time.setText(rc.getTime());

    }




    @Override
    public int getItemCount() {
        return list.isEmpty() ? 0 : list.size();
    }
    static class ViewHolder extends RecyclerView.ViewHolder {

        private ImageView recycler_item_image;
        private TextView recycler_item_name, recycler_item_time;

        public ViewHolder(View itemView) {
            super(itemView);
        }
    }

    //添加数据
    public void addItem(List<Recycler> newDatas) {
        //mTitles.add(position, data);
        //notifyItemInserted(position);
        newDatas.addAll(list);
        list.removeAll(list);
        list.addAll(newDatas);
        notifyDataSetChanged();
    }

    public void addMoreItem(List<Recycler> newDatas) {
        list.addAll(newDatas);
        notifyDataSetChanged();
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值