Android - Listview行内的水平列表视图

时间:2016-10-05 11:53:38

标签: android listview horizontallist

在listview自定义行中创建水平列表视图时遇到问题。问题是,第一行列表视图有3个项目,即A,B C.和第二行列表视图,在水平列表视图中有6个项目,即A,B,C,D,E,F。

我无法摆脱这个问题。

enter image description here

以下是代码段

创建3个arraylist

List<SectionArea> sectionAreas;
List<BannerArea> bannerAreas;
List<Wrapper> wrappers;

从服务器

获取json数据的代码
 wrappers = new ArrayList<Wrapper>();
                            // Code to get all wrapper in Icons list
                            JSONArray wrapperArray = object.getJSONArray("wrapper");
                            for (int i = 0; i < wrapperArray.length(); i++) {

                                sectionAreas = new ArrayList<SectionArea>();
                                bannerAreas = new ArrayList<BannerArea>();

                                JSONObject wrapperObj = wrapperArray.getJSONObject(i);

                                String section_image = wrapperObj.getString("section_image");
                                String category_id = wrapperObj.getString("category_id");
                                String category_name = wrapperObj.getString("category_name");
                                String banner_title = wrapperObj.getString("banner_title");

                                JSONArray sectioArray = wrapperObj.getJSONArray("sectionarea");
                                for (int j = 0; j < sectioArray.length(); j++) {

                                    JSONObject jsonObject = sectioArray.getJSONObject(j);

                                    String product_id = jsonObject.getString("product_id");
                                    String sec_category_id = jsonObject.getString("category_id");
                                    String name = jsonObject.getString("name");
                                    String image = jsonObject.getString("image");
                                    String price = jsonObject.getString("price");
                                    String special = jsonObject.getString("special");
                                    String discount = jsonObject.getString("discount");

                                    SectionArea sectionArea = new SectionArea(product_id, sec_category_id, name, image, price, special, discount);
                                    sectionAreas.add(sectionArea);

                                }

                                JSONArray bannerAreaArray = wrapperObj.getJSONArray("bannerarea");
                                for (int k = 0; k < bannerAreaArray.length(); k++) {


                                    JSONObject jsonObject = bannerAreaArray.getJSONObject(k);
                                    String image = jsonObject.getString("image");
                                    String tag = jsonObject.getString("tag");
                                    String id = jsonObject.getString("id");

                                    BannerArea bannerArea = new BannerArea(image, tag, id);
                                    bannerAreas.add(bannerArea);
                                }

                                Wrapper wrapper = new Wrapper(section_image, category_id, category_name, banner_title,
                                        sectionAreas, bannerAreas);
                                wrappers.add(wrapper);

                            }

                        }

添加适配器

 list.setAdapter(new HomePageAdapter(context, wrappers));

用于设置水平列表视图的适配器代码

 sectionAreas = wrappers.get(position).getSectionAreas();
        viewHolder.item_list.setAdapter(new HorizontaListAdapter(mContext, sectionAreas));

请帮忙。提前致谢

2 个答案:

答案 0 :(得分:1)

您必须将LinearlayoutManagerRecyclerView一起使用。

LinearLayoutManager layoutManager= new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);

答案 1 :(得分:0)

HomePageAdapter

替换为以下行
   viewHolder.item_list.setAdapter(new HorizontaListAdapter(mContext, sectionAreas));

使用

  viewHolder.item_list.setAdapter(new HorizontaListAdapter(mContext, wrappers.get(position).getSectionAreas()));

同时从您的代码MainActivity

中替换以下行
          sectionAreas = new ArrayList<SectionArea>();
          bannerAreas = new ArrayList<BannerArea>();

通过

    ArrayList<SectionArea>  sectionAreas = new ArrayList<SectionArea>();
    ArrayList<BannerArea>  bannerAreas = new ArrayList<BannerArea>();

删除公共变量

List<SectionArea> sectionAreas;
List<BannerArea> bannerAreas;

注意:

我检查了您的代码,发现您已使用HorizontalView水平显示项目。 所以只是一个建议,您可以使用Android默认水平RecyclerView,而不是使用任何自定义类。哪个更可靠。

使用EX:

  RecyclerView recyclerTeams= (RecyclerView) mainView.findViewById(R.id.recyclerTeams);
  LinearLayoutManager llManager = new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false);
  recyclerTeams.setLayoutManager(llManager);