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

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BACKWASH2038

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值