实现ListView 三种不同布局的加载的方式

    xiaoxiao2021-12-14  19

           相信大家都会使用ListView加载相同的布局了,接下来这篇文章,想说一下,如果要加载多种不同的布局该怎么去实现?

           其实很简单,与之不同的是 ,加载相同的布局,我们只需搭建一种布局模板即可,而如果要加载多种不同的布局,我们就得准备好这几种不同的布局模板 ,接下来 我们就用个实例来说一下,如何加载三种不同的布局?

           之前我们加载同一种布局的时候,是没必须写这两个方法的,但在加载多种不同布局的时候,我们就必须在自定义的Adapter中重写这两个方法, getItemViewType(int position) 和getViewTypeCount()

    实例如下:

    分析 如下:

         第一步: 自定义CustomAdapter,继承自BaseAdapter,并重写其抽象方法,尤其必须重写文中提到的那两个方法

    [java]  view plain  copy   class CustomAdapter extends BaseAdapter {       ArrayList<HashMap<String, Object>> lists;       Context context;       LinearLayout linearLayout = null;       LayoutInflater inflater;       TextView text;       final int VIEW_TYPE = 3;       final int TYPE_1 = 0;       final int TYPE_2 = 1;       final int TYPE_3 = 2;          public CustomAdapter(Context context,               ArrayList<HashMap<String, Object>> lists) {           this.lists = lists;           this.context = context;       }          @Override       public int getCount() {           return lists.size();       }          @Override       public Object getItem(int position) {           return lists.get(position);       }          @Override       public long getItemId(int position) {           return 0;       }      //    这个方法必须重写 ,这个item要加载什么 布局类型 //    每个convertView都会调用此方法,获得当前所需要的view模板      @Override       public int getItemViewType(int position) {           int p = position;           if (p == 0)               return TYPE_1;           else if (p == 1)               return TYPE_2;           else               return TYPE_3;       }      //  这个方法必须重写 //  获得几种布局模板     @Override       public int getViewTypeCount() {           return 3;       }          @Override       public View getView(int position, View convertView, ViewGroup parent) {           ViewHolder1 holder1 = null;           ViewHolder2 holder2 = null;           ViewHolder3 holder3 = null;           int type = getItemViewType(position);           if (convertView == null) {               inflater = LayoutInflater.from(context);               // 这里使用switch 最好了,根据布局类型,来加载什么布局模板             switch (type) {               case TYPE_1:                      convertView = inflater.inflate(R.layout.item_type1,                           parent, false);                   holder1 = new ViewHolder1();                   holder1.name = (TextView) convertView                           .findViewById(R.id.tv_list1_name);                   holder1.age = (TextView) convertView                           .findViewById(R.id.tv_list1_age);                   convertView.setTag(holder1);                   break;               case TYPE_2:                   convertView = inflater.inflate(R.layout.item_type2,                           parent, false);                   holder2 = new ViewHolder2();                   holder2.name = (TextView) convertView                           .findViewById(R.id.tv_list2_name);                   holder2.age = (TextView) convertView                           .findViewById(R.id.tv_list2_age);                   convertView.setTag(holder2);                   break;               case TYPE_3:                   convertView = inflater.inflate(R.layout.item_type3,                           parent, false);                   holder3 = new ViewHolder3();                   holder3.name = (TextView) convertView                           .findViewById(R.id.tv_list3_name);                   holder3.age = (TextView) convertView                           .findViewById(R.id.tv_list3_age);                   convertView.setTag(holder3);                   break;               }  

               } else {               switch (type) {               case TYPE_1:                   holder1 = (ViewHolder1) convertView.getTag();                   break;               case TYPE_2:                   holder2 = (ViewHolder2) convertView.getTag();                   break;               case TYPE_3:                   holder3 = (ViewHolder3) convertView.getTag();                   break;               }           }   // 这里用个switch来做判断最好了,根据加载时哪种布局,给这个布局上的控件赋值         switch (type) {           case TYPE_1:               holder1.name.setText("" + (position + 1));               holder1.age.setText(lists.get(position).get("age").toString());               break;           case TYPE_2:               holder2.name.setText("" + (position + 1));               holder2.age.setText(ls.get(position).get("age").toString());               holder2.totaldistance2.setText(lists.get(position);               break;           case TYPE_3:               holder3.name.setText("" + (position + 1));               holder3.age.setText(lists.get(position).get("age").toString());               break;           }              return convertView;       }          public class ViewHolder1 {           TextView name;           TextView age;       }          public class ViewHolder2 {           TextView name;           TextView age;       }          public class ViewHolder3 {           TextView name;           TextView age;       }   }  

             

    第二步:接下来 就是在ListView上显示这三种不同的布局了 

     

    [java]  view plain  copy   private CustomAdapter customAdapter;     ArrayList<HashMap<String, Object>> lists; ListView listView; lists=new ArrayList<HashMap<String, Object>>();     customAdapter=new CustomAdapter(this, lists); listView = (Listview) view.findViewById(R.id.lv_listView); listView.setAdapter(customAdapter);

    转载请注明原文地址: https://ju.6miu.com/read-969671.html

    最新回复(0)