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>
给recycleview添加头布局并能点击item多个子控件
最新推荐文章于 2020-11-04 11:25:29 发布