欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ListView 显示两种不同的Item 布局

程序员文章站 2022-06-08 15:58:22
...
1,需求:Android 7.0 设置Settings,添加语言Add Language的展示界面中,去除Suggested 这个条目

经过分析发现,其实就是ListView 的item 展示不同布局的问题

第一步:    

 //change date:2018/3/16 by  第一个Type类型从 TYPE_HEADER_SUGGESTED = 0 改为 TYPE_HEADER_ALL_OTHERS = 0,按顺序排列
    private static final int TYPE_HEADER_SUGGESTED = 2;
    private static final int TYPE_HEADER_ALL_OTHERS = 0;
    private static final int TYPE_LOCALE = 1;

            第二步:

  @Override
    public int getItemViewType(int position) {
        //change date:2018/3/16 by 周新贵 第一行显示Suggested 改为 All language
//        if (!showHeaders()) {
//            return TYPE_LOCALE;
//        } else {
            if (position == 0) {
//                return TYPE_HEADER_SUGGESTED;
                 return TYPE_HEADER_ALL_OTHERS;
            }
//            if (position == mSuggestionCount + 1) {
//                return TYPE_HEADER_ALL_OTHERS;
//            }
            return TYPE_LOCALE;
//        }
    }

        第三步:

  @Override
    public int getViewTypeCount() {
        if (showHeaders()) {
            return 3; // Two headers in addition to the locales
        } else {
            // return 1; // Locales items only
            //返回Type 从1改为2
            return 2;  
        }
    }

        第四步:

 @Override
    public int getCount() {
        if (showHeaders()) {
            return mLocaleOptions.size() + 2; // 2 extra for the headers
        } else {
//            return mLocaleOptions.size();
            //item 的数目改为: locale +1
            return mLocaleOptions.size()+1;    //locale's numbers+"All languages" 
        }
    }

        第五步:

 @Override
    public Object getItem(int position) {
        int offset = -1;    //从0 改为-1
        if (showHeaders()) {
            offset = position > mSuggestionCount ? -2 : -1;
        }
        return mLocaleOptions.get(position + offset);
    }

        第六步: 注释掉  case :

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null && mInflater == null) {
            mInflater = LayoutInflater.from(parent.getContext());
        }

        int itemType = getItemViewType(position);
        switch (itemType) {
            //case TYPE_HEADER_SUGGESTED:      // intentional fallthrough
            case TYPE_HEADER_ALL_OTHERS:

        第七步:不展示 header(原来的header是suggested条目)

     //返回值:改为一直返回 false by周新贵
    private boolean showHeaders() {
       
        if (mCountryMode && mLocaleOptions.size() < MIN_REGIONS_FOR_SUGGESTIONS) {
            return false;
        }
    //  return mSuggestionCount != 0 && mSuggestionCount != mLocaleOptions.size();
        return false;
    }

主要的问题就是,listView展示不同的条目之后,要修改相应的api的返回值。

完成后的效果图, 只剩下 绿色的 All languages 这一行了:去掉了Suggested(不贴图了)

ListView 显示两种不同的Item 布局