RecycleVIew实现内容页的展示

总效果:
实现的功能:①点击右上角的心按钮实现心按钮的切换(线性切换成网格)
------------------②点击四个不同的按钮实现前三个按钮的具体展示
------------------③点击条目进入详情页
在这里插入图片描述

1.布局

①头部布局:用自定义View,布局完新建一个类继承LinearLayout:
-------加载一下布局LayoutInflater.from(context).inflate(R.layout.toubu,this)
-------查找一下控件

②总布局:
-------引用自定义View(include)
-------Button+RecyclerView(导依赖:implementation ‘com.android.support:recyclerview-v7:28.0.0’)

③其他布局自己写就OK了,没有要注意的点

2.我用的是MVP架构:

①工具类:

注意:写日志拦截器时需要导日志依赖(implementation ‘com.squareup.okhttp3:logging-interceptor:3.12.0’)
在这里插入图片描述

②ModelImpe类里:

在这里插入图片描述

3.适配器:多条目

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private Context context;
private List<MyData.DataBean> mlist;
private int type;
private final int ONE=0;
private final int TWO=1;

public MyAdapter(Context context, List<MyData.DataBean> mlist) {
    this.context = context;
    this.mlist = mlist;
}
public void setType(int type){
    this.type=type;
}

//加载布局
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=null;
    RecyclerView.ViewHolder holder=null;
    switch (i){
        case ONE:
            view=LayoutInflater.from(context).inflate(R.layout.wrecy,null);
            holder=new LinerHolder(view);
            break;
        case TWO:
            view=LayoutInflater.from(context).inflate(R.layout.lrecy,null);
            holder=new GridHolder(view);
            break;
    }
    view.setOnClickListener(this);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
    if(viewHolder instanceof LinerHolder){
        ((LinerHolder)viewHolder).ming.setText(mlist.get(i).getTitle()+"");
        ((LinerHolder)viewHolder).jiage.setText("价格:" + mlist.get(i).getPrice() + "");
        ((LinerHolder)viewHolder).shu.setText("销量:" + mlist.get(i).getSalenum()+"");
        //字符串截取
        String images = mlist.get(i).getImages();
        String[] split = images.split("\\|");
        for (int j = 0; j < images.length(); j++) {
            Glide.with(context).load(split[0]).into(((LinerHolder) viewHolder).img);
        }
    }else{
        ((GridHolder)viewHolder).ming2.setText(mlist.get(i).getTitle());
        ((GridHolder)viewHolder).jiage2.setText("价格:" + mlist.get(i).getPrice() + "");
        ((GridHolder)viewHolder).shu2.setText("销量:" + mlist.get(i).getSalenum());
        String images = mlist.get(i).getImages();
        String[] split = images.split("\\|");
        for (int j = 0; j < images.length(); j++) {
            Glide.with(context).load(split[0]).into(((GridHolder) viewHolder).img2);
        }
    }
    viewHolder.itemView.setTag(i);
}

@Override
public int getItemCount() {
    return mlist.size();
}
//重写的这个方法
@Override
public int getItemViewType(int position) {
    return type;
}

class LinerHolder extends RecyclerView.ViewHolder{

    private  ImageView img;
    private  TextView ming;
    private  TextView jiage;
    private  TextView shu;

    public LinerHolder(@NonNull View itemView) {
        super(itemView);
        img = itemView.findViewById(R.id.img);
        ming = itemView.findViewById(R.id.ming);
        jiage = itemView.findViewById(R.id.jiage1);
        shu = itemView.findViewById(R.id.shu);
    }
}
class GridHolder extends RecyclerView.ViewHolder{

    private ImageView img2;
    private TextView ming2;
    private TextView jiage2;
    private TextView shu2;

    public GridHolder(@NonNull View itemView) {
        super(itemView);
        img2 = itemView.findViewById(R.id.img2);
        ming2 = itemView.findViewById(R.id.ming2);
        jiage2 = itemView.findViewById(R.id.jiage2);
        shu2 = itemView.findViewById(R.id.shu2);
    }
}

//接口回调
public interface ItemClick {
    void setOnClick(View view, int position);
}

private ItemClick itemClick;

public void setOnClickListennr(ItemClick itemClick) {
    this.itemClick = itemClick;
}

@Override
public void onClick(View v) {
    if (itemClick != null) {
        itemClick.setOnClick(v, (int) v.getTag());
    }
}

}

4.MainActivity:

public class MainActivity extends BaseActivity implements IView, View.OnClickListener {

private String mUrl = "http://www.zhaoapi.cn/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=1&sort=";
private List<MyData.DataBean> mlist = new ArrayList<>();
private PresenterImpe presenterImpe;
private RecyclerView recyclerView;
private MyAdapter adapter;
private Button retu;
private EditText sousuo;
private Button qh;
private boolean b = true;
private Button zonghe;
private Button xiaoliang;
private Button jiage;
private Button shaixuan;

@Override
protected int getLayout() {
    return R.layout.activity_main;
}

@Override
protected void initViews() {

    retu = findViewById(R.id.retu);
    sousuo = findViewById(R.id.sousuo);
    qh = findViewById(R.id.qh);
    zonghe=findViewById(R.id.zonghe);
    xiaoliang=findViewById(R.id.xiaoliang);
    jiage=findViewById(R.id.jiage);
    shaixuan=findViewById(R.id.shaixuan);

    recyclerView = findViewById(R.id.Recy);
    //线性布局
    LinearLayoutManager manager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(manager);
    adapter = new MyAdapter(this, mlist);
    adapter.setType(1);
    recyclerView.setAdapter(adapter);
    //条目点击事件
    adapter.setOnClickListennr(new MyAdapter.ItemClick() {
        @Override
        public void setOnClick(View view, int position) {
            Intent intent=new Intent(MainActivity.this,XQActivity.class);
            intent.putExtra("name",mlist.get(position).getTitle());
            intent.putExtra("price",mlist.get(position).getPrice()+"");
            startActivityForResult(intent,200);
        }
    });
}

@Override
protected void setOnClick() {
    retu.setOnClickListener(this);
    sousuo.setOnClickListener(this);
    qh.setOnClickListener(this);
    zonghe.setOnClickListener(this);
    xiaoliang.setOnClickListener(this);
    jiage.setOnClickListener(this);
    shaixuan.setOnClickListener(this);
}

@Override
protected void pageLogic() {
    presenterImpe = new PresenterImpe(this);
    presenterImpe.getData(mUrl+"0");
}

@Override
public void success(Object data) {
    mlist.addAll((Collection<? extends MyData.DataBean>) data);
    adapter.notifyDataSetChanged();
}

@Override
public void error(String error) {

}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.retu:
            finish();
            break;
        case R.id.sousuo:
            break;
            //切换按钮
        case R.id.qh:
            if (b == false) {
                LinearLayoutManager manager = new LinearLayoutManager(this);
                recyclerView.setLayoutManager(manager);
                adapter.setType(1);
                adapter.notifyDataSetChanged();
                b = true;
            } else if (b == true) {
                GridLayoutManager manager1 = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);
                recyclerView.setLayoutManager(manager1);
                adapter.setType(0);
                adapter.notifyDataSetChanged();
                b = false;
            }
            break;
            //按综合排序
        case R.id.zonghe:
            mlist.clear();
            presenterImpe.getData(mUrl+"0");
            break;
        //按销量排序
        case R.id.xiaoliang:
            mlist.clear();
            presenterImpe.getData(mUrl+"1");
            break;
        //按价格排序
        case R.id.jiage:
            mlist.clear();
            presenterImpe.getData(mUrl+"2");
            break;
    }
}

}

猜你喜欢

转载自blog.csdn.net/qq_43603312/article/details/85339275
今日推荐