zoukankan      html  css  js  c++  java
  • listView 多布局

    最近在开发项目中遇到了实现类似淘宝首页的需求,使用listView可以解决,在此记录一下。

    实现步骤:

    • 重写 getViewTypeCount() – 返回你有多少个不同的布局
    • 重写 getItemViewType(int) – 由position返回view type id
    • 根据view item的类型,在getView中创建正确的convertView

    下面是代码示例:

    Activity:

    HomeItem jchdItem = new HomeItem();
    jchdItem.setItemType(ItemType.JCHD);
    homeItems.add(jchdItem);
    HomeItem yhhdItem = new HomeItem(); yhhdItem.setItemType(ItemType.YHHD_LIST); List<YhhdBean> yhhdLists = new ArrayList<>(); for (int i = 0; i < privilege.size(); i++) { JSONObject object2 = privilege.getJSONObject(i); YhhdBean yhhdList = new YhhdBean(); yhhdLists.add(yhhdList); } yhhdItem.setYhhdLists(yhhdLists); homeItems.add(yhhdItem); adapter = new HomeAdapter(getActivity(), homeItems); lv_home_list.setAdapter(adapter);

    layout:

        <ListView
            android:id="@+id/lv_home_list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:divider="@null"
            android:overScrollMode="never"
            android:scrollbars="none" />

    Adapter:

    public class HomeAdapter extends BaseAdapter {
        private Context context;
        private List<HomeItem> list;
        private final static int JCHD = 3;
        private final static int YHHD_LIST = 4;
    
        public HomeAdapter(Context context, List<HomeItem> list) {
            this.context = context;
            this.list = list;
        }
    
        @Override
        public int getCount() {
            return list != null ? list.size() : 0;
        }
    
        @Override
        public Object getItem(int i) {
            return list == null ? null : list.get(i);
        }
    
        @Override
        public long getItemId(int i) {
            return i;
        }
    
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            HomeItem homeItem = list.get(i);
            LayoutInflater inflater = LayoutInflater.from(context);
            YhhdHodlder yhhdHodlder;
            YhhdListHolder yhhdListHolder;
            int type = homeItem.getItemType().getValue();
            switch (type) {
                case JCHD:
                    if (view == null) {
                        view = inflater.inflate(R.layout.view_yhhd, null);
                        yhhdHodlder = new YhhdHodlder(context, view, "精彩");
                        view.setTag(yhhdHodlder);
                    } else {
                        yhhdHodlder = (YhhdHodlder) view.getTag();
                    }
                    break;
                case YHHD_LIST:
                    if (view == null) {
                        view = inflater.inflate(R.layout.view_main_yhhd_list, null);
                        yhhdListHolder = new YhhdListHolder(context, view);
                        view.setTag(yhhdListHolder);
                    } else {
                        yhhdListHolder = (YhhdListHolder) view.getTag();
                    }
                    yhhdListHolder.initView(homeItem);
                    break;
            }
            return view;
        }
    
        @Override
        public int getItemViewType(int position) {
            if (list != null && position < list.size()) {
                return list.get(position).getItemType().getValue();
            }
            return super.getItemViewType(position);
        }
    
        @Override
        public int getViewTypeCount() {
            return 2;
        }
    }
    HomeItem:
    public class HomeItem {
        private ItemType itemType;
        private List<YhhdBean> yhhdLists;
    
        public ItemType getItemType() {
            return itemType;
        }
    
        public void setItemType(ItemType itemType) {
            this.itemType = itemType;
        }
    
        public List<YhhdBean> getYhhdLists() {
            return yhhdLists;
        }
    
        public void setYhhdLists(List<YhhdBean> yhhdLists) {
            this.yhhdLists = yhhdLists;
        }
    
    }
    ItemType:
    public enum ItemType {
    
        JCHD(3),   
        YHHD_LIST(4);  
    
        public int getValue() {
            return value;
        }
    
        private int value;
    
        ItemType(int value) {
            this.value = value;
        }
    }
  • 相关阅读:
    单例实现c++
    c++智能指针实现方式1
    c++中处理输入输出的方法
    makefile函数
    5. Longest Palindromic Substring
    go 语言中常用的包
    ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
    boost-asio-cpp-network-programming阅读笔记
    链接-装载-库,读书笔记
    leecode第二百一十七题(存在重复元素)
  • 原文地址:https://www.cnblogs.com/chhom/p/8320667.html
Copyright © 2011-2022 走看看