布局===================================================================
mian_activity=============================================================
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context="com.example.recyclerview.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/teach_recycler" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
item===================================================================
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:background="#ff00ff" android:layout_height="match_parent"> <ImageView android:src="@mipmap/ic_launcher" android:layout_width="80dp" android:layout_height="80dp" /> <TextView android:id="@+id/teach_item_name" android:gravity="center" android:layout_width="match_parent" android:layout_height="80dp" /> </LinearLayout>
代码===================================================================
package com.example.recyclerview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements RecyclerAdapter.OnItemClickListener { private static final String TAG = MainActivity.class.getSimpleName(); private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.teach_recycler); //设置布局管理器 //1、第一种LinearLayoutManager LinearLayoutManager layoutManager = new LinearLayoutManager(this); //2、第二种 GridLayoutManager // GridLayoutManager layoutManager=new GridLayoutManager(this,3); //3、第三种 //StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); // //设置布局的排版方向 // layoutManager.setOrientation(GridLayoutManager.HORIZONTAL); mRecyclerView.setLayoutManager(layoutManager); //绑定适配器 RecyclerAdapter adapter = new RecyclerAdapter(this, getData()); mRecyclerView.setAdapter(adapter); adapter.setOnItemClickListener(this);//将接口传递到数据产生的地方 } /** * 获取数据源 * * @return */ public List<Modle> getData() { List<Modle> data = new ArrayList<>(); for (int i = 0; i < 30; i++) { Modle model = new Modle(); model.setName("猴子请来的都比---" + i); model.setHeight(((int) (Math.random() * 100 + 200))); data.add(model); } return data; } @Override public void onItemClick(int position, Modle model) { Log.e(TAG, "onItemClick: " + position); } }
RecyclerView========================================================
package com.example.recyclerview; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; /** * Created by 你家大林哥 on 2018/5/3. */ public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> implements View.OnClickListener { private static final String TAG = RecyclerAdapter.class.getSimpleName(); private List<Modle> data; private LayoutInflater inflater; private RecyclerView mRecyclerView;//用来计算Child位置 private OnItemClickListener onItemClickListener; //对外提供接口初始化方法 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public RecyclerAdapter(Context context, List<Modle> data) { this.data = data; inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public static class ViewHolder extends RecyclerView.ViewHolder{ TextView name; public ViewHolder(View itemView) { super(itemView); name= (TextView) itemView.findViewById(R.id.teach_item_name); } } /** * 创建VIewHolder,导入布局,实例化itemView * @param parent * @param viewType * @return */ @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = inflater.inflate(R.layout.item, parent, false); //导入itemView,为itemView设置点击事件 itemView.setOnClickListener(this); return new ViewHolder(itemView); } /** * 绑定VIewHolder,加载数据 * @param holder * @param position */ @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.name.setText(data.get(position).getName());//加载数据 ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams(); layoutParams.height=data.get(position).getHeight(); holder.itemView.setLayoutParams(layoutParams); } /** * 数据源的数量,item的个数 * @return */ @Override public int getItemCount() { return data!=null?data.size():0; } /** * 适配器绑定到RecyclerView 的时候,回将绑定适配器的RecyclerView 传递过来 * @param recyclerView */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); mRecyclerView=recyclerView; } /** * * @param v 点击的View */ @Override public void onClick(View v) { //RecyclerView可以计算出这是第几个Child int childAdapterPosition = mRecyclerView.getChildAdapterPosition(v); Log.e(TAG, "onClick: "+childAdapterPosition ); if (onItemClickListener!=null) { onItemClickListener.onItemClick(childAdapterPosition,data.get(childAdapterPosition)); } } /** * 接口回调 * 1、定义接口,定义接口中的方法 * 2、在数据产生的地方持有接口,并提供初始化方法,在数据产生的时候调用接口的方法 * 3、在需要处理数据的地方实现接口,实现接口中的方法,并将接口传递到数据产生的地方 */ public interface OnItemClickListener{ void onItemClick(int position,Modle model); } }
Modle====================================================================
扫描二维码关注公众号,回复:
1729089 查看本文章
package com.example.recyclerview; /** * Created by 你家大林哥 on 2018/5/3. */ public class Modle { private String name; private int height; public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
依赖=====================================================================
compile 'com.android.support:recyclerview-v7:26.1.0'