android仿拼多多实现左右分类

效果图.gif

注:数据是别人大神的

我们看下我们的json数据结构


android仿拼多多实现左右分类_第1张图片
数据结构.png

实现思路;
1.首先我们需要解析(我的放在本地assets文件夹下面名字为category.json)数据,将.json数据转换成string

  /**
     * 得到json文件中的内容
     */
    public static String getJson(Context context, String fileName) {
        StringBuilder stringBuilder = new StringBuilder();
        //获得assets资源管理器
        AssetManager assetManager = context.getAssets();
        //使用IO流读取json文件内容
        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
                    assetManager.open(fileName), "utf-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

2.将String类型的数据转成相应的对象,并保存左边listview的位置


    private void loadData() {
        //解析本地的json数据
        String json = getJson(this, "category.json");
        Gson gson = new Gson();
        CategoryBean categoryBean = gson.fromJson(json, CategoryBean.class);
        showTitle = new ArrayList<>();
        for (int i = 0; i < categoryBean.getData().size(); i++) {
            CategoryBean.DataBean dataBean = categoryBean.getData().get(i);
            menuList.add(dataBean.getModuleTitle());
            showTitle.add(i);
            homeList.add(dataBean);
        }
        tv_title.setText(categoryBean.getData().get(0).getModuleTitle());
        menuAdapter.notifyDataSetChanged();
        homeAdapter.notifyDataSetChanged();
    }

3.我们这时候会发现,我们实际在右边是解析了所有数据,这时候我们需要实现左右两个listview进行关联,首先我们对左边的listview进行点击事件

 lv_menu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                menuAdapter.setSelectItem(position);
                menuAdapter.notifyDataSetInvalidated();
                tv_title.setText(menuList.get(position));
                lv_home.setSelection(position);
            }
        });

右边listview滑动事件的处理

lv_home.setOnScrollListener(new AbsListView.OnScrollListener() {
           private int scrollState;
           @Override
           public void onScrollStateChanged(AbsListView view, int scrollState) {
               this.scrollState = scrollState;
           }

           @Override
           public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
               if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                   return;
               }
               int current = showTitle.indexOf(firstVisibleItem);
               if (currentItem != current && current >= 0) {
                   currentItem = current;
                   tv_title.setText(menuList.get(currentItem));
                   menuAdapter.setSelectItem(currentItem);
                   menuAdapter.notifyDataSetInvalidated();
               }
           }
       });

你可能感兴趣的:(android仿拼多多实现左右分类)