给recycleview添加头布局并能点击item多个子控件

来源:互联网 发布:mac 系统 编辑:程序博客网 时间:2024/05/17 01:03
package com.example.myapplication;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.Arrays;public class MainActivity extends AppCompatActivity {private RecyclerView recycleview;    //private ArrayList arr={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};    //吧一下的数据作为数据存储到集合中,记住这个是任意的数据都可以用这样的方式存储的    private ArrayList arr=new ArrayList(Arrays.asList(R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher));    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recycleview=(RecyclerView) findViewById(R.id.recycleview);        recycleview.setLayoutManager(new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL));//折是瀑布流        SpacesItemDecoration decoration=new SpacesItemDecoration(3);        recycleview.addItemDecoration(decoration);//Decoration:装饰        //设置默认的动画,好像没啥作用的        recycleview.setItemAnimator(new DefaultItemAnimator());        MyAdapter adapter= new MyAdapter(this,arr);            recycleview.setAdapter(adapter);        adapter.setOnItemClickLitener(new MyAdapter.OnItemClickLitener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, "1", Toast.LENGTH_SHORT).show();                if(view.getId()==R.id.imageview){                    Toast.makeText(MainActivity.this, "图片", Toast.LENGTH_SHORT).show();                startActivity(new Intent(MainActivity.this,nextActivicy.class));                }else if(view.getId()==R.id.textview){                    Toast.makeText(MainActivity.this, "文字", Toast.LENGTH_SHORT).show();                    startActivity(new Intent(MainActivity.this,next2.class));                }            }        });    }}package com.example.myapplication;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;/** * Created by zhq_zhao on 2016/11/10. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {    private static final int TYPE_ITEM = 0;    private static final int TYPE_HEADER = 1;    private Context context;    private ArrayList list = new ArrayList();    public MyAdapter(MainActivity mainActivity, ArrayList arr) {        context = mainActivity;        list = arr;    }    /**     * 判断当前item的类型根据位置positon有关系的     */    @Override    public int getItemViewType(int position) {        if (position == 0) {//当前的位置是最后一个,返回脚布局            return TYPE_HEADER;        } else {            return TYPE_ITEM;//否则就是item        }    }    //步骤一 :定义回调接口    public interface OnItemClickLitener {        void onItemClick(View itemView, int position);    }    private OnItemClickLitener mOnItemClickLitener;    //步骤二:定义回调函数(将接口作为参数)    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {        this.mOnItemClickLitener = mOnItemClickLitener;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //创建布局的时候要判断当前的viewtype是哪个类型是item还是脚布局        if (viewType == TYPE_ITEM) {//当前是item类型的数据就开始创建item布局文件            View view = View.inflate(parent.getContext(), R.layout.activity_a, null);            return new ViewHolder(view);        } else if (viewType == TYPE_HEADER) {//当前是脚步不类型            //创建一个新的脚布局文件            View view = View.inflate(parent.getContext(), R.layout.jiaobuju, null);            return new HeaderViewHolder(view);        }        return null;    }    @Override    public void onBindViewHolder(final ViewHolder holder, final int position) {        if (holder instanceof HeaderViewHolder) {            //当前的holder对象不是item类型的就不要填充数据了之间返回就可以了,            ((HeaderViewHolder) holder).jiao.setText("我把头部局数据变动了");        }        if (holder instanceof ViewHolder) {//如果当前的holder类是viewholder就开始绑定数据item的数据            //将数据保存在tag中            // holder.itemView.setTag(list.get(position));没必要因为设置这个的原因就是取数据方便,而数据在集合中直接可以取,所以没比较当然设置上也是可以的            //如果设置了回调,则设置点击事件            if (mOnItemClickLitener != null) {                if (holder.imageview instanceof ImageView) {                    holder.imageview.setImageResource((Integer) list.get(position));                    holder.imageview.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            mOnItemClickLitener.onItemClick(holder.imageview, position);                        }                    });                }                if (holder.textview instanceof TextView) {                    holder.textview.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            mOnItemClickLitener.onItemClick(holder.textview, position);                        }                    });                }            }        }    }    @Override    public int getItemCount() {        return list.size() - 1;    }    /**     * 当前类的类型是item     */    class ViewHolder extends RecyclerView.ViewHolder {        public ImageView imageview;        private TextView textview;        public ViewHolder(View itemView) {            super(itemView);            imageview = (ImageView) itemView.findViewById(R.id.imageview);            textview = (TextView) itemView.findViewById(R.id.textview);        }    }    /**     * 当前类的类型是脚布局类型的类     */    class HeaderViewHolder extends ViewHolder {        public TextView jiao;        public HeaderViewHolder(View view) {            super(view);            jiao = (TextView) view.findViewById(R.id.jiao);        }    }}package com.example.myapplication;import android.graphics.Rect;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by zhq_zhao on 2016/11/10. */public class SpacesItemDecoration extends RecyclerView.ItemDecoration {    private int space;    public SpacesItemDecoration(int space) {        this.space=space;    }    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        outRect.left=space;        outRect.right=space;        outRect.bottom=space;        if(parent.getChildAdapterPosition(view)==0){//得到每个孩子的当前位置,第一个位置的距离上面的空格            outRect.top=space;        }    }}<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    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="com.example.myapplication.MainActivity">   <android.support.v7.widget.RecyclerView       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:id="@+id/recycleview">   </android.support.v7.widget.RecyclerView></RelativeLayout><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="100dp"    android:background="#ff00"    android:layout_height="100dp"    android:orientation="vertical">    <ImageView        android:layout_gravity="center"        android:id="@+id/imageview"        android:src="@drawable/ic_launcher"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:layout_gravity="center"        android:id="@+id/textview"        android:textSize="25dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="我是textview" /></LinearLayout><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/jiao"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:textSize="55dp"        android:text="我是头布局局文件"/></LinearLayout><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:text="文字跳转进来"/></LinearLayout><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"      android:gravity="center"        android:text="图片跳转进来"/></LinearLayout>

原创粉丝点击