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

来源:互联网 发布:淘宝分销一件代发 编辑:程序博客网 时间:2024/05/16 06:33

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 );//刷新图标一直消失
0 0
原创粉丝点击