Android中RecyclerView实现商品分类功能

本文实例为大家分享了Android中RecyclerView实现商品分类功能的具体代码,供大家参考,具体内容如下

三个个RecyclerView实现

//左边的布局

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_name"
        android:textSize="18sp"
        android:text="阿萨德发的"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

//右边的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name"/>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/right_recy"
        android:layout_below="@+id/name"/>
</RelativeLayout>

//子布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image2"
        android:layout_width="90dp"
        android:layout_height="90dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title1" />
</LinearLayout>

//定义一个接口

public interface CallBack {
void onSuccess(List<LeftBean.DataBean> list);
void onFailer(String error);
}

//左边的Model层

public class LeftModel {

    private  String path="http://www.zhaoapi.cn/product/getCatagory";
    public void getData(final CallBack callBack){
        OkHttp okHttp=new OkHttp();
        okHttp.get(path).getDataLiserner(new OkHttp.GetData() {
            @Override
            public void Data(String s) {
                Gson gson=new Gson();
                LeftBean json = gson.fromJson(s, LeftBean.class);
                List<LeftBean.DataBean> data = json.getData();
                if (data!=null){
                    callBack.onSuccess(data);
                }else {
                    callBack.onFailer("失败");
                }
            }
        });
    }
}

//左边的Presenter层

public class LeftPresenter {
    private LeftView leftView;
    private final LeftModel leftModel;

    public LeftPresenter(LeftView leftView) {
        this.leftView = leftView;
        leftModel = new LeftModel();
    }

    public void showLeft(){
        leftModel.getData(new CallBack() {
            @Override
            public void onSuccess(List<LeftBean.DataBean> list) {
                leftView.onSuccess(list);
            }

            @Override
            public void onFailer(String error) {
                leftView.Failer(error);
            }
        });
    }
}

//View层

public interface LeftView {
   void onSuccess(List<LeftBean.DataBean> list);
   void Failer(String error);
}

//左边的适配器

public class LeftRecycAdapter extends RecyclerView.Adapter<LeftRecycAdapter.LeftViewHoler>{

    private Context mContext;
    private List<LeftBean.DataBean> list;

    public LeftRecycAdapter(Context mContext, List<LeftBean.DataBean> list) {
        this.mContext = mContext;
        this.list = list;
    }

    @NonNull
    @Override
    public LeftViewHoler onCreateViewHolder(@NonNull ViewGroup viewGroup, int ViewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.left_item, viewGroup,false);
        LeftViewHoler leftViewHoler=new LeftViewHoler(view);
        return leftViewHoler;
    }

    @Override
    public void onBindViewHolder(@NonNull LeftViewHoler leftViewHoler, int position) {
        leftViewHoler.textView.setText(list.get(position).getName());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class LeftViewHoler extends RecyclerView.ViewHolder {
        private TextView textView;
        public LeftViewHoler(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.tv_name);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onClickListener.onclick(v,getAdapterPosition());
                }
            });
        }
    }

    public interface OnClickListener{
        void onclick(View view,int position);
    }

    OnClickListener onClickListener;

    public void setOnclickListener(OnClickListener onclickListener){
        this.onClickListener=onclickListener;
    }
}

开始右边的了
//右边的接口

public interface CallBackRight {
    void onSuccess2(List<RightBean.DataBean> list);
    void onFailer2(String error);
}

//右边的Model层

public class RightModel {
   // private String path1="http://www.zhaoapi.cn/product/getProductCatagory?cid=3&tdsourcetag=s_pcqq_aiomsg";
    public void showright(final String cid2, final CallBackRight callBackRight){

                OkHttp okHttp=new OkHttp();
                okHttp.get(cid2).getDataLiserner(new OkHttp.GetData() {
                    @Override
                    public void Data(String s) {
                        Gson gson=new Gson();
                        RightBean json = gson.fromJson(s, RightBean.class);
                        List<RightBean.DataBean> data = json.getData();
                        if (data!=null){
                            callBackRight.onSuccess2(data);
                        }else {
                            callBackRight.onFailer2("错误");
                        }
                    }
                });

    }
}

//右边的Presenter层

public class RightPresenter {
    private final RightModel rightModel;
    private RightView rightView;

    public RightPresenter(RightView rightView) {
        this.rightView = rightView;
        rightModel = new RightModel();
    }

    public void showright(String id){
        rightModel.showright(id, new CallBackRight() {
            @Override
            public void onSuccess2(List<RightBean.DataBean> list) {
                rightView.onSuccess2(list);
            }

            @Override
            public void onFailer2(String error) {
                rightView.onFailer2(error);
            }
        });
    }
}

//右边的View层

public interface RightView {
    void onSuccess2(List<RightBean.DataBean> list);
    void onFailer2(String error);
}

//右边的适配器

public class RightRecycAdapter extends RecyclerView.Adapter<RightRecycAdapter.ViewHolder> {

    private Context mContext;
    private List<RightBean.DataBean> list;

    public RightRecycAdapter(Context mContext, List<RightBean.DataBean> list) {
        this.mContext = mContext;
        this.list = list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int ViewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.right_item, viewGroup, false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
        viewHolder.textView.setText(list.get(position).getName());
        List<RightBean.DataBean.ListBean> list = this.list.get(position).getList();
        GridLayoutManager gridLayoutManager=new GridLayoutManager(mContext,3);
        viewHolder.recyclerView.setLayoutManager(gridLayoutManager);
        ChildAdapter childAdapter=new ChildAdapter(mContext,list);
        viewHolder.recyclerView.setAdapter(childAdapter);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private RecyclerView recyclerView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.name);
            recyclerView=itemView.findViewById(R.id.right_recy);
        }
    }
}

//子类适配器

public class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ViewHolder> {

    private Context context;
    private List<RightBean.DataBean.ListBean> list;

    public ChildAdapter(Context context, List<RightBean.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int ViewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.child, viewGroup, false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
        viewHolder.textView.setText(list.get(position).getName());
        Picasso.with(context).load(list.get(position).getIcon()).into(viewHolder.imageView);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView imageView;
        private TextView textView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView=itemView.findViewById(R.id.image2);
            textView=itemView.findViewById(R.id.title1);
        }
    }
}

//开始使用

public class Fragment1 extends Fragment implements LeftView,RightView {

    private View view;
    private RecyclerView left;
    private RecyclerView right;
    private RightPresenter rightPresenter;

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            final List<LeftBean.DataBean> list = (List<LeftBean.DataBean>) msg.obj;
            LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
            left.setLayoutManager(linearLayoutManager);
            LeftRecycAdapter leftRecycAdapter=new LeftRecycAdapter(getActivity(),list);
            left.setAdapter(leftRecycAdapter);
            leftRecycAdapter.setOnclickListener(new LeftRecycAdapter.OnClickListener() {
                @Override
                public void onclick(View view, int position) {
                    int cid = list.get(position).getCid();
                    rightPresenter.showright("http://www.zhaoapi.cn/product/getProductCatagory?cid="+cid);
                }
            });
            //List<RightBean.DataBean> list1 = (List<RightBean.DataBean>) msg.obj;

        }
    };

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_fragment1, container, false);
        initView();
        return view;
    }

    private void initView() {
        LeftPresenter leftPresenter=new LeftPresenter(this);
        leftPresenter.showLeft();
        left = (RecyclerView) view.findViewById(R.id.left_recy);
        right = (RecyclerView) view.findViewById(R.id.right_recy);
        rightPresenter = new RightPresenter(this);
    }

    @Override
    public void onSuccess(List<LeftBean.DataBean> list) {
        Message message = Message.obtain();
        message.obj=list;
        handler.sendMessage(message);
    }

    @Override
    public void Failer(String error) {

    }

    @Override
    public void onSuccess2(final List<RightBean.DataBean> list) {
        /*Message message = Message.obtain();
        message.obj=list;
        handler.sendMessage(message);*/

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        LinearLayoutManager linear= new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
                        right.setLayoutManager(linear);
                        RightRecycAdapter rightRecycAdapter=new RightRecycAdapter(getActivity(),list);
                        right.setAdapter(rightRecycAdapter);

                    }
                });

}
    @Override
    public void onFailer2(String error) {

    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 仿京东、拼多多商品分类页的示例代码

    最近接了一个项目,要仿照京东写一个商品分类页,但需要滑动右边子分类,左边的主分类也跟着变换,写了个demo,需要的同学可以自取. 先放一个写完之后的样子: 写这个需求的思路也很清晰,首先左边肯定是一个listView,右边也是一个listView,这两个listView要达到一个联动的效果.右边的listView再嵌套一个GridView即可.如下图所示. 所以,我们需要的数据结构也就确定了,应该是数组套数组,也就说护肤大分类下又有子分类商品,类似于这个样子: ok,数据和UI结构确定了,就可以

  • Android中RecyclerView实现商品分类功能

    本文实例为大家分享了Android中RecyclerView实现商品分类功能的具体代码,供大家参考,具体内容如下 三个个RecyclerView实现 //左边的布局  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="50d

  • Android中RecyclerView拖拽、侧删功能的实现代码

    废话不多说,下面展示一下效果. 这是GridView主文件实现. public class GridViewActivity extends AppCompatActivity { RecyclerView mRecyclerView; List<String> mStringList; RecyclerAdapter mRecyAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { s

  • Android中RecyclerView实现简单购物车功能

    Android中RecyclerView实现简单的购物车,供大家参考,具体内容如下 我们知道在ListView中用setTag来解决Item的复用问题,但是RecyclerView中已经帮我们封装好了复用,如果在项目中出现了RecyclerView的复用性问题时我们又该如何解决.先来看看效果图: 图片可能比较大也没有动态图片但效果是这样的!几天后就该有的都会有好了废话不说,进入正题 复用错误分析: RecyclerView设置数据源时加入了if判断,导致item重用时没有进入if判断.继续复用原

  • Android 中RecyclerView顶部刷新实现详解

    Android 中RecyclerView顶部刷新实现详解 1. RecyclerView顶部刷新的原理 RecyclerView顶部刷新的实现通常都是在RecyclerView外部再包裹一层布局.在这个外层布局中,还包含一个自定义的View,作为顶部刷新时的指示View.也就是说,外层布局中包含两个child,一个顶部刷新View,一个RecyclerView,顶部刷新View默认是隐藏不可见的.在外层布局中对滑动事件进行处理,当RecyclerView滑动到顶部并继续下滑的时候,根据滑动的距

  • Android中RecyclerView实现横向滑动代码

    RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好.本文给大家介绍Android中RecyclerView实现横向滑动代码,一起看看吧. android.support.v7.widget.RecyclerView 功能:RecyclerView横向滑动 控件:<android.support.v7.widget.RecyclerView /> Java类:RecyclerView.GalleryAdap

  • Android中recyclerView底部添加透明渐变效果

    前言 最近实现一个recyclerView透明渐变的效果,遇到了一些坑,尝试了一些方法,这里记录一下. 效果图 图片在上面显示2列,文字在下面显示1列:底部要有个透明渐变的效果,直到完全看不到. gridLayoutManager动态设置列数 大概是分两类,一类以图片为item 一行2个,一类以文字为item 一行一个. 这个第一反应是用viewType去区分图片类型,但是由于起初不知道gridLayout可以动态列数.就在上面两列,下面一列上为难起来了. 如果统一用一列吧,那就把两个image

  • android实现RecyclerView列表单选功能

    本文实例为大家分享了android实现RecyclerView列表单选功能的具体代码,供大家参考,具体内容如下 实现思维 1.首先在一行的xml布局中添加一个选中效果的icon图片,未选中的情况下INVISIBLE或者GONE 都可以,推荐使用INVISIBLE它会占用布局位置但是不显示,这样可以避免布局中其他控件因为勾选布局的消失而轻微变动位置 2.将适配器类中的onCreateViewHolder方法重写添加按键监听,onBindViewHolder方法中重写添加判断点击的位置(具体原理请查

  • Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    //activity的xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity

  • Android 中RecyclerView通用适配器的实现

    Android 中RecyclerView通用适配器的实现 前言: SDK的5.0版本出来已经N久了,可以说是已经经过许多人的检验了,里面的新控件不能说是非常完美,但也是非常好用了,其中最让我喜爱的就是RecyclerView了,可以完美替代ListView和GridView(除了添加headerview和footview了,网上有许多解决方式.这个下面会以一种简单的方式顺带解决,肯定为大家省心),而且可以代码动态切换这两种布局方式以及瀑布流布局.相关切换方式网上有很多,大家自行搜索,我就不贴连

  • Android中RecyclerView实现Item添加和删除的代码示例

    本文介绍了Android中RecyclerView实现Item添加和删除的代码示例,分享给大家,具体如下: 先上效果图: RecyclerView简介: RecyclerView用以下两种方式简化了数据的展示和处理: 1. 使用LayoutManager来确定每一个item的排列方式. 2. 为增加和删除项目提供默认的动画效果,也可以自定义. RecyclerView项目结构如下: Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器

随机推荐