使用recycleview实现瀑布流布局

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值