RecyclerView 嵌套RecyclerView 简单使用包含自定义回调点击事件

**

第一个RecyclerView布局

**


**

第一个RecyclerView条目

**





第二个RecyclerView布局





**

第二个RecyclerView条目

**




    

    

    

    




**

第一个RecyclerView 页面

**

private String url2 = "放请求的网址";
private RecyclerView recycler;

recycler = (RecyclerView) get(R.id.recycler);
    //new 线性传上下文
    LinearLayoutManager layoutManager = new LinearLayoutManager(context);
    //给线性布局设置方法
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    //记得把这个设置到recycler里
    recycler.setLayoutManager(layoutManager);
    //读取商品标题方法
    dohttptitle();
    
    private void dohttptitle() {
    //new 工具类
    new OkHttpUtil().get(url2).result(new OkHttpUtil.OkHttpListener() {
        @Override
        public void success(String s1) {
            //new gson from 传字符串和bean类
            RvBean rvBean = new Gson().fromJson(s1, RvBean.class);
            //获取bean类的集合
            final List dataBean = rvBean.getData();
            //设置适配器
            RvAdapter rvAdapter = new RvAdapter(context, dataBean);
            //调用适配器 点击事件回调方法 new 括号
            rvAdapter.setOnItemClickListener1(new RvAdapter.OnItemClickListener1() {
                @Override
                public void success(int index) {
                    //吐司显示
                    Toast.makeText(context, dataBean.get(index).getSellerName(), Toast.LENGTH_SHORT).show();
                }
            });
            //给recycler设置适配器
            recycler.setAdapter(rvAdapter);
        }
    });
}

**

第一个RecyclerView 适配器

**
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;

//继承recycler.适配器 泛型自己定义的内部类 先实现方法 强转
public class RvAdapter extends RecyclerView.Adapter {

//封装上下文和集合 构造方法
private Context context;
private List dataBean;
private OnItemClickListener1 onItemClickListener1;

public RvAdapter(Context context, List dataBean) {
    this.context = context;
    this.dataBean = dataBean;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    //view  inf  获取布局
    View view = View.inflate(context, R.layout.rv_item, null);
    //实例化内部类 传view
    MyViewHolder myViewHolder=new MyViewHolder(view);
    //内部类=view 获取控件
    myViewHolder.t_title=view.findViewById(R.id.t_title);
    //获取recycler控件
    myViewHolder.recycler2=view.findViewById(R.id.recycler2);

    //记得返回内部类
    return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        //给内部类的控件赋值 集合位置 获取名称
    myViewHolder.t_title.setText(dataBean.get(i).getSellerName());

第二个RecyclerView 页面

    //new 瀑布流 传列数和方向
    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    //给内部类 recycler2 设置瀑布流
    myViewHolder.recycler2.setLayoutManager(staggeredGridLayoutManager);
    //设置适配器 集合是 集合里的集合
    RvAdapter2 rvAdapter2=new RvAdapter2(context,dataBean.get(i).getList());
    //给适配器调用回调方法点击事件 new括号
    rvAdapter2.setOnItemClickListener2(new RvAdapter2.OnItemClickListener2() {
        @Override
        public void success(int index) {
            //吐司显示
            Toast.makeText(context,"哈哈哈"+index,Toast.LENGTH_SHORT).show();
        }
    });

    //给内部类 recycler 设置适配器
    myViewHolder.recycler2.setAdapter(rvAdapter2);


    //内部类标题 点击事件
    myViewHolder.t_title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //调用回调方法 传i 索引
            onItemClickListener1.success(i);
        }
    });

}

@Override
public int getItemCount() {
    //返回集合大小
    return dataBean.size();
}

//定义内部类 继承系统的内部类  实现类
class MyViewHolder extends RecyclerView.ViewHolder {
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
    }

    public TextView t_title;
    //内部类的recycler
    public RecyclerView recycler2;
}

//公共的设置回调接口方法 括号里实例化接口
public void setOnItemClickListener1(OnItemClickListener1 onItemClickListener1){
     this.onItemClickListener1 = onItemClickListener1;
}

//公共的点击事件接口
public interface OnItemClickListener1{
    //成功的方法传 int 的索引
    void success(int index);
}

}
**

第二个RecyclerView 适配器

**
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.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;

//继承 recycler .适配器 泛型内部类
public class RvAdapter2 extends RecyclerView.Adapter {

//封装上下文和集合里的集合 构造方法
private Context context;
private List listBean;
private OnItemClickListener2 onItemClickListener2;

public RvAdapter2(Context context, List listBean) {
    this.context = context;
    this.listBean = listBean;
}

@NonNull
@Override
public MyViewHolder2 onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    //view inf 获取布局
    View view2 = View.inflate(context, R.layout.rv_item2, null);
    //实例化内部类 传view2
    MyViewHolder2 myViewHolder2=new MyViewHolder2(view2);
    //内部类=view2 获取控件
    myViewHolder2.t_img2=view2.findViewById(R.id.t_img2);
    myViewHolder2.t_title2=view2.findViewById(R.id.t_title2);
    myViewHolder2.t_desc2=view2.findViewById(R.id.t_desc2);
    myViewHolder2.t_price2=view2.findViewById(R.id.t_price2);
    myViewHolder2.item2=view2.findViewById(R.id.item2);

    //记得返回内部类
    return myViewHolder2;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder2 myViewHolder2, final int i) {
    //给内部类 赋值集合位置
    myViewHolder2.t_title2.setText(listBean.get(i).getTitle());
    myViewHolder2.t_desc2.setText(listBean.get(i).getSubhead());
    //记得double加个字符串¥:
    myViewHolder2.t_price2.setText("价格¥:"+listBean.get(i).getPrice());
    //picasso 赋值图片
    Picasso.with(context).load(listBean.get(i).getImages()).into(myViewHolder2.t_img2);
    //给内部类的条目点击事件
    myViewHolder2.item2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //调用回调方法 传上面的i  索引
            onItemClickListener2.success(i);
        }
    });
}

@Override
public int getItemCount() {
    //先返回集合大小
    return listBean.size();
}

//内部类  实现方法
class MyViewHolder2 extends RecyclerView.ViewHolder {
    public MyViewHolder2(@NonNull View itemView) {
        super(itemView);
    }

    public ImageView t_img2;
    public TextView t_title2;
    public TextView t_desc2;
    public TextView t_price2;
    public LinearLayout item2;

}

//公共的设置回调接口方法 括号里实例化接口
public void setOnItemClickListener2(OnItemClickListener2 onItemClickListener2){
    this.onItemClickListener2 = onItemClickListener2;
}

//公共的点击事件接口
public interface OnItemClickListener2{
    //成功的方法传 int 的索引
    void success(int index);
}

}

OkHttp请求网络数据省略

Bean类省略

你可能感兴趣的:(RecyclerView 嵌套RecyclerView 简单使用包含自定义回调点击事件)