android 高仿拼多多,android仿拼多多实现左右分类

f0ef19f418a9?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

效果图.gif

注:数据是别人大神的

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

f0ef19f418a9?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

数据结构.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();

}

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值