使用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
- 使用recycleview实现瀑布流布局
- 实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- javascript实现瀑布流布局
- iOS瀑布流布局实现
- js实现瀑布流布局
- jq实现瀑布流布局
- jquery实现瀑布流布局
- RecyclerView实现瀑布流布局
- RecyclerView实现瀑布流布局
- AJAX实现瀑布流布局
- UICollectionView实现瀑布流布局
- RecyclerView实现瀑布流布局
- Masonry实现瀑布流布局
- JavaScript实现瀑布流布局
- JavaScript实现瀑布流布局
- RecyclerView实现瀑布流布局
- shell命令基础
- bzoj2628 kdtree 模板
- 模板方法模式
- servlet的生命周期
- Python 网络抓取和文本挖掘-2 XML 和 JSON
- 使用recycleview实现瀑布流布局
- oj1022
- PAT B1027. 打印沙漏(20)
- 收藏夹整理
- C语言 · 高精度乘法
- 数据清洗实例分析
- Golang RPC调用例子程序(实现超时机制)
- android光照、加速度传感器
- windows下安装 Nodejs 并在 WebStorm 9.0.1 下搭建编译 LESS 环境