您的位置:首页 > 移动开发 > Android开发

Android RecycleView瀑布流点击吐丝、长按删除,很炫酷的一个列表展示

2018-03-19 09:23 549 查看
RecycleView是5.0之后推出的一个新控件,所以使用就要先导入一个依赖包:
        compile 'com.android.support:recyclerview-v7:22.2.1'

2.实现的效果挺好看的,需要的赶紧来试一下,真的感觉跟瀑布一样,虽然错乱,但是也形成的一个专属于它的风格,下面介绍一下怎么实现的: mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );这个是确定一共4列、方向his竖向。可以根据你所需要的进行设置。MainActivityimport 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 mHeights.add((int)(150+Math.random()*300));//随机获取高度,添加到集合中这一句话实现了每个item的高度,但是都是随机给的高度,可以看出大大小小有点不相同。
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
ae97
="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>
//如发现一个类式的,那是之前使用的号,为了给大家讲解的更清晰,就又申请了一个博客。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐