Android进阶篇【chapter-10】 RecyclerView的使用与RecyclerView多类型视图的构造

Android进阶篇【chapter-10】 RecyclerView的使用与RecyclerView多类型视图的构造


在Build.gradle中加compile ‘com.android.support:recyclerview-v7:23.0.0’

一;RecyClerView区别于ListView(布局文件的不同):

<android.support.v7.widget.RecyclerView xmlns:android= "http://schemas.android.com/apk/res/android"
    xmlns:tools= "http://schemas.android.com/tools"
    android:id="@+id/activity_main_rv_news"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


</android.support.v7.widget.RecyclerView >

二:RecyClerView需要一个LayoutMannager

private RecyclerView  recyclerView ;//声明RecyclerView  

 //需要在MainAcitivity中设置LayoutManager
        LinearLayoutManager manager = new LinearLayoutManager(this);//如果是在Fragment中this要写成getActivity(),获取依附在Activity的Fragment;
StaggeredGridLayoutManager manager= new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager. VERTICAL);
        //为RecyclerView设置LayoutManager
        recyclerView .setLayoutManager(manager);

三:自定义适配器的不同

package com.example.yangjie.test;

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

import org.w3c.dom.Text;

import java.util.ArrayList;

/**
* Created by Administrator on 2015/9/16.
*/
public class PeopleAdapter extends RecyclerView.Adapter<PeopleAdapter.ItemViewHolder>{
    Context context ;
    ArrayList<Person> listpeople ;

    public PeopleAdapter(Context context, ArrayList<Person> listpeople) {
        this .context = context;
        this .listpeople = listpeople;
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View  view=LayoutInflater.from(context).inflate(R.layout. item_activity,viewGroup, false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
        itemViewHolder.nameview.setText(listpeople.get(i).getName());
        itemViewHolder.phoneview.setText(listpeople.get(i).getPhonenumber());

    }
    @Override
    public int getItemCount() {
        return listpeople.size();
    }

    class  ItemViewHolder extends RecyclerView.ViewHolder{
        private  TextView nameview;
        private   TextView phoneview;
        public ItemViewHolder(View itemView) {
            super(itemView);
            nameview=(TextView)itemView.findViewById(R.id.item_activty_name);
            phoneview=(TextView)itemView.findViewById(R.id. item_activty_phonenumber);
        }
    }
}

四:RecyclerView多类型不规则视图的列表

public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    private ArrayList<News> newses = new ArrayList<>();
    private Context context ;
    private LayoutInflater inflater ;
    private View headView ;//一般都是加的视图,常见都是图片,或者按钮
    public NewsAdapter(Context context,View headView) {
        this .context = context;
        this .inflater = LayoutInflater.from(context);
        this .headView = headView;
    }
    public  void addAll(ArrayList<News> newses){
        this .newses .addAll(newses);
        notifyDataSetChanged();
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
//        return new ItemViewHolder(inflater.inflate(R.layout.item_news,viewGroup,false));
        if (i == 1 ){
            return new HeadViewHolder(headView);
        }else {
            return new ItemViewHolder(inflater.inflate(R.layout. item_news,viewGroup, false));
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {

        if (i == 0 ){

        }else {
            News news = newses.get(i-1);
            ItemViewHolder holder = (ItemViewHolder)viewHolder;
            holder.titleView.setText(news.getTitle());
            holder.contentView.setText(news.getContent());
        }
    }
    @Override
    public int getItemCount() {
        return newses.size()+ 1;
    }
    @Override
    public int getItemViewType(int position) {    //列表默认返回值是0,所以把第一项的返回值设为1,其实可以是其他数字,
        if (position == 0 ){
            return 1;
        }else {
            return 0;
        }
    }
    public class ItemViewHolder extends RecyclerView.ViewHolder{
         TextView titleView,contentView;
        public ItemViewHolder(View itemView) {
            super(itemView);
            titleView = (TextView)itemView.findViewById(R.id. item_news_title);
            contentView = (TextView)itemView.findViewById(R.id.item_news_content );
        }
    }

public class HeadViewHolder extends RecyclerView.ViewHolder{   //同样要给加的视图写个ViewHolder
        public HeadViewHolder(View itemView) {
            super(itemView);
        }
    }
}

五:RecyclerView和CardView连用(因为listview有个分割线而RecyclerView,所以RecyclerView 和CardView 连用)(工程picture)

CardView很简单,加在布局文件最外边就可以了

<android.support.v7.widget.CardView
    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:cardBackgroundColor="#FF0000"
    app:cardCornerRadius="8dp"
    app:cardElevation="8dp"
    >

</android.support.v7.widget.CardView>

六:RecyclerView和ListView向下滑动时候,最上面会弹出一个刷新的(可滑动的视图都可以)(工程picture)

在布局文件中:

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/activity_swipe"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android :id="@+id/activity_recyclerview"
        android :layout_width="match_parent"
        android :layout_height="match_parent" />

//中间放可以滑动的视图,比如是listview或者recyrview,反正可滑动视图都可以
</android.support.v4.widget.SwipeRefreshLayout >

//主Activity实现 implements SwipeRefreshLayout.OnRefreshListener接口,重写 onRefresh()方法

swipeRefreshLayout.setOnRefreshListener(this);并且在onRefresh()写监听的事件
swipeRefreshLayout.setRefreshing(true );//刷新图标一直存在
swipeRefreshLayout.setRefreshing(false );//刷新图标一直消失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值