Android RecycleView瀑布流

来源:互联网 发布:问卷星回收数据 编辑:程序博客网 时间:2024/05/29 10:09

Android  RecycleView瀑布流

1.需要依赖架包

compile 'com.android.support:recyclerview-v7:22.2.1'
2.实现的效果挺好看的,需要的赶紧来试一下

MainActivity

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import android.support.v7.widget.StaggeredGridLayoutManager;/** * 瀑布流原理:其实就是动态的将recycle下的网格布局的每个item的高度进行动态随机设置--》LayoutParmas * */public class MainActivity extends Activity{    private RecyclerView mRecy;    private List<String> list;    private MyRecycleView adapter;    //适配器    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化数据源        initList();        //初始化控件        initView();    }    private void initView() {        mRecy=(RecyclerView) findViewById(R.id.mRecy);        adapter=new MyRecycleView(MainActivity.this, list);        //spanCount:列数  orientation:线性方向        //StaggeredGridLayoutManager:recycleView下的实现gridView的管理器        mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );        mRecy.setAdapter(adapter);        //设置条目动画:默认的        mRecy.setItemAnimator(new DefaultItemAnimator());        //设置点击事件        onClick();    }    //点击事件其实是调用的适配器里面的点击事件    private void onClick() {        adapter.setOnItemClickListener(new MyRecycleView.onItemClickListerner() {            @Override            public void onLongItemClick(View view, int position) {                //调用适配器里面的删除的方法                adapter.RemoveView(position);            }            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, "点击了第"+(position+1)+"条数据", 0).show();            }        });    }    private void initList() {        list=new ArrayList<String>();        for(int i=0;i<40;i++){            list.add("第"+(i+1)+"条数据");        }    }}
MyRecycleView

import java.util.ArrayList;import java.util.List;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.ViewHolder;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnLongClickListener;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.TextView;/* * recycleView 适配器 * */public class MyRecycleView extends RecyclerView.Adapter<MyRecycleView.MyViewHolder>{    private Context ctx;    private List<String> list;    private List<Integer> mHeights;//这个是每个item的随机高度集合    private onItemClickListerner listener;//自己写的回调接口    public MyRecycleView(Context ctx,List<String> list) {        this.ctx=ctx;        this.list=list;        //初始化item的随机高度,准备后期动态添加        mHeights=new ArrayList<Integer>();        for(int i=0;i<list.size();i++){            mHeights.add((int)(150+Math.random()*300));//随机获取高度,添加到集合中        }    }    @Override    public int getItemCount() {        return list.size();    }    @Override    public void onBindViewHolder(final MyViewHolder holder, int position) {        //动态更改item的高度啊        LayoutParams lp=holder.mTv.getLayoutParams();        lp.height=mHeights.get(position);        holder.mTv.setLayoutParams(lp);        holder.mTv.setText(list.get(position));        //设置回调        if(listener!=null){            holder.itemView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    int pos=holder.getAdapterPosition();                    //回调                    listener.onItemClick(holder.itemView, pos);                }            });            holder.itemView.setOnLongClickListener(new OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    int pos=holder.getAdapterPosition();                    listener.onLongItemClick(holder.itemView, pos);                    // RemoveView(pos);                    return false;                }            });        }    }    @Override    public MyRecycleView.MyViewHolder onCreateViewHolder(ViewGroup view, int position) {        //c初始化及导入item布局 给holder        MyViewHolder holder=new MyViewHolder(View.inflate(ctx, R.layout.item, null));        return holder;    }    //  自己创建的内部类,让它继承自recycleView下的ViewHolder    class MyViewHolder extends ViewHolder{        TextView mTv;        public MyViewHolder(View view) {            super(view);            //找id            mTv=(TextView) view.findViewById(R.id.mTv);        }    }    //自己定义的回调接口    public interface onItemClickListerner{        void onItemClick(View view,int position);        void onLongItemClick(View view,int position);    }    //设置回调接口的方法    public void setOnItemClickListener(onItemClickListerner listener){        this.listener=listener;    }    //删除选中条目的方法    public void RemoveView(int position){        list.remove(position);        notifyItemRemoved(position);    }}
xml.布局

activity_main

<android.support.v7.widget.RecyclerView    android:id="@+id/mRecy"    android:layout_width="match_parent"    android:layout_height="match_parent"    />
item

<?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="match_parent">    <TextView        android:id="@+id/mTv"        android:layout_width="100dp"        android:layout_height="100dp"        android:gravity="center"        android:background="#28c8b7"        android:layout_marginTop="5dp"        android:layout_marginLeft="5dp"        android:layout_marginRight="5dp"        android:layout_marginBottom="5dp"        android:text="1"        /></LinearLayout>






原创粉丝点击