使用recycleview实现瀑布流布局

来源:互联网 发布:feel软件下载 编辑:程序博客网 时间:2024/05/08 23:52

上一篇有简答的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();    }}


1 0
原创粉丝点击