前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android实现类似京东商品分类效果(RecyclerView+fragment)

Android实现类似京东商品分类效果(RecyclerView+fragment)

作者头像
SoullessCoder
修改2021-02-03 10:03:38
2.8K0
修改2021-02-03 10:03:38
举报
文章被收录于专栏:CodeCode

最近做项目需求的时候,需要实现类似京东的商品分类。网上看了很多都是通过listview+fragment实现,个人比较习惯使用RecyclerView,所以就通过RecyclerView+fragment实现了该需求,记录一下。

1、效果图

选中状态可以根据需求进行设置

20190515182914322.png

2、Demo目录结构

20190515182943330.png

3、主程序MainActivity(MainActivity)

代码语言:txt
复制
public class MainActivity extends AppCompatActivity implements ThemeMainAdapter.OnSelectorListener {

    private RecyclerView recyclerView;
    private ThemeMainAdapter adapter;
    private List<ThemeMainReq.DatasBean> datasBeanList;
    private ThemeFragment themeFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initData();
        initListener();
    }

    private void initView() {
        recyclerView = findViewById(R.id.recyclerview);

        //初始化recyclerView
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
        recyclerView.addItemDecoration(new SpaceItemDecoration(getApplicationContext(), 5, 3));

        //初始化adapter
        adapter = new ThemeMainAdapter(this);
        adapter.setOnSelectorListener(this);
    }

    private void initData() {
        //模拟数据
        String response = "{\"datas\": [{\"id\": \"56\",\"showName\": \"清新\"},{\"id\": \"57\",\"showName\": \"复古\"},{\"id\": \"58\", \"showName\": \"古风\"},{\"id\": \"59\", \"showName\": \"盐系\"},{ \"id\": \"141\", \"showName\": \"暗黑\"},{  \"id\": \"62\", \"showName\": \"花草\"},{\"id\": \"63\", \"showName\": \"\n" +
                "美食物品\"},{ \"id\": \"64\", \"showName\": \"人物\" },{ \"id\": \"65\",  \"showName\": \"文字字母\"},{\"id\": \"67\", \"showName\": \"基础款\"},{\"id\": \"68\",\"showName\": \"风景\"},{ \"id\": \"70\", \"showName\": \"动物\"}]}\n";
        //对数据进行解析
        ThemeMainReq themeMainReq = new Gson().fromJson(response, ThemeMainReq.class);
        //获取分类集合
        datasBeanList = themeMainReq.getDatas();
        //数据处理
        dealWithData(datasBeanList);
    }

    private void dealWithData(List<ThemeMainReq.DatasBean> datasBeanList) {
        //传递数据
        adapter.setData(datasBeanList);
        recyclerView.setAdapter(adapter);
        //默认选中
        datasBeanList.get(0).setChick(true);
        //创建Fragment对象
        themeFragment = new ThemeFragment();
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, themeFragment);

        //传递数据到Fragment
        Bundle mBundle = new Bundle();
        mBundle.putSerializable("info", datasBeanList.get(0));
        themeFragment.setArguments(mBundle);
        fragmentTransaction.commit();
    }

    private void initListener() {

    }

    @Override
    public void onSelect(View view, int position) {

        //选中处理
        ThemeMainReq.DatasBean datasBean = datasBeanList.get(position);
        for (int i = 0; i < datasBeanList.size(); i++) {
            if (datasBeanList.get(i).getShowName().equals(datasBean.getShowName())) {
                datasBeanList.get(i).setChick(true);
            } else {
                datasBeanList.get(i).setChick(false);
            }
        }

        //刷新列表
        adapter.notifyDataSetChanged();

        //创建Fragment对象
        themeFragment = new ThemeFragment();
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, themeFragment);

        //传递数据到Fragment
        Bundle mBundle = new Bundle();
        mBundle.putSerializable("info", datasBeanList.get(position));
        themeFragment.setArguments(mBundle);
        fragmentTransaction.commit();
    }
}

4、主程序布局文件(activity_main.xml)

代码语言:txt
复制
<?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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fbfbfb"
        android:orientation="horizontal">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#fff"
            android:scrollbars="none" />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="#cdcdcd" />

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3" />
    </LinearLayout>

</LinearLayout>

5、bean数据类(ThemeMainReq)

代码语言:txt
复制
public class ThemeMainReq implements Serializable {


    private List<DatasBean> datas;

    public List<DatasBean> getDatas() {
        return datas;
    }

    public void setDatas(List<DatasBean> datas) {
        this.datas = datas;
    }

    public static class DatasBean implements Serializable{
        /**
         * id : 56
         * showName : 清新
         */

        private String id;
        private String showName;
        private boolean chick;   //标识

        public boolean isChick() {
            return chick;
        }

        public void setChick(boolean chick) {
            this.chick = chick;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getShowName() {
            return showName;
        }

        public void setShowName(String showName) {
            this.showName = showName;
        }
    }
}

6、适配器adapter(ThemeMainAdapter)

代码语言:txt
复制
public class ThemeMainAdapter extends RecyclerView.Adapter<ThemeMainAdapter.ViewHolder> {
    private Context mContext;
    private List<ThemeMainReq.DatasBean> listinfos;

    public ThemeMainAdapter(Context context) {
        this.mContext = context;
    }

    //接收数据
    public void setData(List<ThemeMainReq.DatasBean> listinfos) {
        this.listinfos = listinfos;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        holder.itemView.setId(position);

        ThemeMainReq.DatasBean datasBean = listinfos.get(position);
        holder.text_content.setText(datasBean.getShowName());

        if (datasBean.isChick()) {
            holder.itemView.setBackgroundResource(R.drawable.auth_code_bg);
        } else {
            holder.itemView.setBackgroundColor(Color.parseColor("#DDDDDD"));
        }

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSelectorListener.onSelect(v, position);
            }
        });

    }

    public interface OnSelectorListener {
        void onSelect(View view, int position);
    }

    public void setOnSelectorListener(OnSelectorListener listener) {
        mSelectorListener = listener;
    }

    private OnSelectorListener mSelectorListener;

    @Override
    public int getItemCount() {
        return listinfos.size() == 0 ? 0 : listinfos.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView text_content;

        public ViewHolder(View itemView) {
            super(itemView);
            text_content = itemView.findViewById(R.id.tv);
        }
    }
}

7、Fragment类(ThemeFragment)

代码语言:txt
复制
public class ThemeFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.myfragment, null);
        TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
        //得到数据
        ThemeMainReq.DatasBean info = (ThemeMainReq.DatasBean) getArguments().getSerializable("info");
        tv_title.setText(info.getShowName());
        return view;
    }
}

到这里就实现了,需要Demo的童鞋,底部公众号回复 "商品分类"即可获取。


小编整理了一份Android电子书籍,需要的童鞋关注公众号回复:"e_books" 即可获取哦!

在这里插入图片描述
在这里插入图片描述

欢迎关注公众号(longxuanzhigu),获得更多福利、精彩内容哦!

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档