上一篇有简答的recycleview的实现,这里面只是activity和fruit_item.xml中改动了几行代码
引入jar
compile 'com.android.support:recyclerview-v7:24.1.0'
import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import java.util.ArrayList; import java.util.List; import java.util.Random; public class MainActivity extends Activity { private List<Fruit> fruitList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); RecyclerView recycle= (RecyclerView) findViewById(R.id.recycle); // LinearLayoutManager layoutManager=new LinearLayoutManager(this); // layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置横向 //瀑布流布局
//3是指排列的列数,StaggeredGridLayoutManager.VERTICAL排列方向
StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recycle.setLayoutManager(layoutManager); FruitAdapter adapter=new FruitAdapter(fruitList); recycle.setAdapter(adapter); } private void initFruits() { for (int i = 0; i < 10; i++) { Fruit apple = new Fruit(getRandomaLengthName("apple"), R.drawable.apple); fruitList.add(apple); Fruit banana = new Fruit(getRandomaLengthName("banana"), R.drawable.banana); fruitList.add(banana); Fruit grape = new Fruit(getRandomaLengthName("grape"), R.drawable.grape); fruitList.add(grape); Fruit orange = new Fruit(getRandomaLengthName("orange"), R.drawable.orange); fruitList.add(orange); Fruit pineapple = new Fruit(getRandomaLengthName("pineapple"), R.drawable.pineapple); fruitList.add(pineapple); Fruit watermelon = new Fruit(getRandomaLengthName("watermelon"), R.drawable.watermelon); fruitList.add(watermelon); } } private String getRandomaLengthName(String name) { Random random=new Random(); int length=random.nextInt(20)+1; StringBuilder builder=new StringBuilder(); for(int i=0;i<length;i++){ builder.append(name); } return builder.toString(); }}
Fruit.java 实体类
public class Fruit { private String name; private int imageId; public Fruit(String names, int apple1) { name=names; imageId=apple1; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImageId() { return imageId; } public void setImageId(int imageid) { this.imageId = imageid; } }
FruitAdapter
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { private List<Fruit> mFruitList; public FruitAdapter(List<Fruit> fruitList) { mFruitList=fruitList; } static class ViewHolder extends RecyclerView.ViewHolder{ ImageView fruitImage; TextView fruitName; public ViewHolder(View itemView) { super(itemView); fruitImage= (ImageView) itemView.findViewById(R.id.fruitImage); fruitName= (TextView) itemView.findViewById(R.id.textView); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); ViewHolder holder=new ViewHolder(view); return holder; } @Override public void onBindViewHolder(FruitAdapter.ViewHolder holder, int position) { Fruit fruit=mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); Log.i("lg","lgcount=>"+fruit.getName()); } @Override public int getItemCount() { return mFruitList.size(); } }
activity_main.xml
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.yh.testrecycle.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </RelativeLayout>
fruit_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:orientation="vertical"> <ImageView android:id="@+id/fruitImage" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView" android:layout_gravity="left" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
当实现点击recycleview时,只需要在adapter中添加几行代码即可
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { private List<Fruit> mFruitList; public FruitAdapter(List<Fruit> fruitList) { mFruitList=fruitList; } static class ViewHolder extends RecyclerView.ViewHolder{ View fruitView; ImageView fruitImage; TextView fruitName; public ViewHolder(View itemView) { super(itemView); fruitView=itemView; fruitImage= (ImageView) itemView.findViewById(R.id.fruitImage); fruitName= (TextView) itemView.findViewById(R.id.textView); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); final ViewHolder holder=new ViewHolder(view); holder.fruitView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int position=holder.getAdapterPosition(); Fruit fruit=mFruitList.get(position); Toast.makeText(view.getContext(), "dianji"+fruit.getName(), Toast.LENGTH_SHORT).show(); } }); /* 这个和上面的点击都可以实现,只是有这个点击事件的情况下,弹出的是下面的toast ,如果没有写这个点击,也就是只有fruitView点击事件,也会实现图片和文字的点击, 并实现点击效果,也就是点击最外层布局,实现内部中任意控件或者布局的点击事件。 holder.fruitImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int position=holder.getAdapterPosition(); Fruit fruit=mFruitList.get(position); Toast.makeText(view.getContext(), "fruit=>"+fruit.getName(), Toast.LENGTH_SHORT).show(); } });*/ return holder; } @Override public void onBindViewHolder(FruitAdapter.ViewHolder holder, int position) { Fruit fruit=mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); Log.i("lg","lgcount=>"+fruit.getName()); } @Override public int getItemCount() { return mFruitList.size(); } }