简单RecyclerView

**

先引入依赖

**

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);
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值