ListView多条目展示

来源:互联网 发布:mac备份 编辑:程序博客网 时间:2024/06/15 14:57
#多条目加载
1.什么是多条目加载
* listView中展示的条目样式不相同的时候
2.应用场景
* 例如,今日头条展示的页面,条目展示的形式不同

3.如何使用多条目加载
* 1.public int getItemViewType(int position) {//返回条目的类型
* 2.public int getViewTypeCount() {//返回条目类型的数量

* 3.不同的ViewHolder,在优化之前先判断当前条目要展示哪种数据类型,然后在进行优化和数据的设置

难点:

listView 多条目展示 的难点在于,如何通过getItemViewType(int position) 获取不同类型数据?

  • 前期 定义几个常量,方便在getView() 方法中直接获取getItemViewType(int position) 的类型

    • private static final int typeOne = 0;
  • 方式

    • 以最常见的新闻类app 来处理,在新闻类app的展示新闻内容中,有的是带图片的,有的没有图片的,有的个数有三个,有的个数有一个。。。这些都可以作为参考,只需要在该方法内添加判断条件,返回对应的常量即可;而这个判断条件的数据需从 传入的数据中获取。
    • 例如 if (TextUtils.isEmpty(items.get(position).url)) { 
      return typeOne; 
      } else { 
      return typeTwo; 
      }
适配器代码:

@Overridepublic int getItemViewType(int position) {    if (TextUtils.isEmpty(items.get(position).url)) {        return typeOne;    } else {        return typeTwo;    }}@Overridepublic int getViewTypeCount() {    return 2;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {    ViewHolder1 vh1 = null;    ViewHolder2 vh2 = null;    int type = getItemViewType(i);    if (view == null) {        switch (type) {            case typeOne:                vh1=new ViewHolder1();                view=View.inflate(context,R.layout.listview_item_nopic,null);                vh1.vh1_name= (TextView) view.findViewById(R.id.item1_nickname);                vh1.vh1_body= (TextView) view.findViewById(R.id.item1_body);                view.setTag(vh1);            break;            case typeTwo:                vh2=new ViewHolder2();                view=View.inflate(context,R.layout.listview_item_pic,null);                vh2.vh2_name= (TextView) view.findViewById(R.id.item2_nickname);                vh2.vh2_body= (TextView) view.findViewById(R.id.item2_body);                vh2.iv= (ImageView) view.findViewById(R.id.item2_iv);                view.setTag(vh2);            break;            default:                break;        }    }    switch (type) {        case typeOne:            vh1= (ViewHolder1) view.getTag();            vh1.vh1_name.setText(items.get(i).nickname);            vh1.vh1_body.setText(items.get(i).body);            break;        case typeTwo:            vh2= (ViewHolder2) view.getTag();            vh2.vh2_name.setText(items.get(i).nickname);            vh2.vh2_body.setText(items.get(i).body);            BitmapUtils bu=new BitmapUtils(context);            bu.display(vh2.iv,"http://res.dxycdn.com/upload"+items.get(i).url);            break;        default:            break;    }        return view;    }    class ViewHolder1 {        TextView vh1_name, vh1_body;    }    class ViewHolder2 {        TextView vh2_name, vh2_body;        ImageView iv;    }

原创粉丝点击