**
先引入依赖
**
implementation 'com.android.support:recyclerview-v7:28.0.0'
**
主页面布局
**
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler"
></android.support.v7.widget.RecyclerView>
</LinearLayout>
**
条目布局
**
<?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"
android:orientation="vertical"
android:id="@+id/layout"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"
android:id="@+id/tv"
/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#000"
/>
</LinearLayout>
</LinearLayout>
**
主页面 MainActivity 模拟数据
**
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler;
//封装集合 实例化
private List<String> list=new ArrayList<>();
private RvAdapter rvAdapter;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//刷新适配器 去下面延时发送消息
rvAdapter.notifyDataSetChanged();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//模拟数据的方法
moni();
//获取控件提上去 强转
recycler=(RecyclerView)findViewById(R.id.recycler);
// //new 线性布局管理器
// LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// //给线性布局设置方向 垂直
// layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
// //给控件设置线性布局
// recycler.setLayoutManager(layoutManager);
// //new 网格管理器 传上下文和列数
// GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3);
// //给recycler 设置网格
// recycler.setLayoutManager(gridLayoutManager);
//new 瀑布流 传列数和 方向
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
//给recycler 设置瀑布流
recycler.setLayoutManager(staggeredGridLayoutManager);
// 设置适配器 提上去 传上下文和集合
rvAdapter=new RvAdapter(this,list);
//适配器调用点击回调方法
rvAdapter.setOnItemClickListenter(new RvAdapter.OnItemClickListenter() {
@Override
public void success(int index) {
//吐司
Toast.makeText(MainActivity.this,"哈哈哈"+index,Toast.LENGTH_SHORT).show();
//删除数据方法 传索引
removeDate(index);
}
});
//给recycler设置适配器
recycler.setAdapter(rvAdapter);
}
private void removeDate(int index) {
//先删除集合条目传索引
list.remove(index);
//删除适配器条目 传索引
rvAdapter.notifyItemRemoved(index);
//去上面封装handler 刷新适配器
//延时发送消息
handler.sendEmptyMessageDelayed(1,500);
}
private void moni() {
//for 循环模拟数据
for(int i=0;i<=50;i++){
list.add("哈哈哈"+i);
list.add("啦规范化即可刚回家滴滴"+i);
list.add("对对固化剂对"+i);
list.add("对赌地对光辉肩铠规范好几个hi卤阳湖图一条狗推与规划和共和国风格也等同于很过分天屿湖将回归固化剂扣扣号对对对"+i);
}
}
}
**
适配器
**
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.util.List;
//继承recycler .适配器 泛型 自己定义的内部类 先实现方法 导出类
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.MyViewHolder> {
//封装上下文和集合 和构造方法
private Context context;
private List<String> list;
private View view;
private OnItemClickListenter onItemClickListenter;
public RvAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//获取布局 view inf 提上去
view = View.inflate(context, R.layout.recycler_item, null);
//实例化内部类 传view视图
MyViewHolder myViewHolder=new MyViewHolder(view);
//内部类获取控件 =view
myViewHolder.tv=view.findViewById(R.id.tv);
myViewHolder.layout=view.findViewById(R.id.layout);
//返回内部类
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
//给内部类 赋值 集合位置
myViewHolder.tv.setText(list.get(i));
//内部类的条目点击事件
myViewHolder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//调用接口方法 传i
onItemClickListenter.success(i);
}
});
}
@Override
public int getItemCount() {
//返回集合大小
return list.size();
}
//定义内部类继承recycler .系统内部类 实现构造
class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(@NonNull View itemView) {
super(itemView);
}
public TextView tv;
public LinearLayout layout;
}
//回调方法 实例化接口 set 设置接口
public void setOnItemClickListenter(OnItemClickListenter onItemClickListenter){
//接口返回值 this. 提上去
this.onItemClickListenter = onItemClickListenter;
}
//公共的设置点击事件的接口
public interface OnItemClickListenter{
//成功的方法 传整型 索引 index
void success(int index);
}
}