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(不贴图了)
推荐阅读
-
Android通过LIstView显示文件列表的两种方法介绍
-
Android通过LIstView显示文件列表的两种方法介绍
-
(转)自定义Android的ListView布局和各Item的背景色
-
(转)自定义Android的ListView布局和各Item的背景色
-
ListView展示不同布局需要注意的地方
-
android使用同一个RecyclerView实现两种不同Item布局
-
ListView 显示两种不同的Item 布局
-
Html+Css+Js_之table每隔3行显示不同的两种颜色_html/css_WEB-ITnose
-
Html+Css+Js_之table每隔3行显示不同的两种颜色_html/css_WEB-ITnose
-
Flutter之ListView 嵌套不同的Item