• Android ListView分组显示


    ListView的实现方法也是普通的实现方法。只不过在list列表中加入groupkey信息。在渲染的时候要判断是否是分组的标题。

    就是在使用不同的两个View的时候存在这种情况,convertView不为空但是由于它渲染到别的layout的关系。它里面内容的view是为空的经常会出现空指针的错误。

    我这里使用了一个非常低效的方法,下次应该会改进一下。

    先贴上自己实现的adapter

      1 import java.util.ArrayList;
      2 import java.util.HashMap;
      3 import java.util.Iterator;
      4 import java.util.List;
      5 import java.util.Map;
      6 import java.util.Set;
      7 
      8 import android.graphics.Bitmap;
      9 import android.os.AsyncTask;
     10 import android.view.View;
     11 import android.view.ViewGroup;
     12 import android.widget.BaseAdapter;
     13 import android.widget.ImageView;
     14 import android.widget.TextView;
     15 import com.enick.project.base.BaseActivity;
     16 import com.enick.project.doman.OrderAll;
     17 import com.enick.project.doman.OrderAll.list;
     18 import com.enick.project.ui.CH_RackingListDetailActivity;
     19 import com.enick.project.utils.ViewUtil;
     20 import com.enick.zdproject.R;
     21 
     22 public class ClothesGroupAdapter extends BaseAdapter {
     23 
     24     private Map<String, List<OrderAll.list>> map = new HashMap<String, List<list>>();
     25     private List<OrderAll.list> list = new ArrayList<OrderAll.list>();
     26     private List<OrderAll.list> temp = null;
     27     private final static String TAG = "RZ";
     28 
     29     public ClothesGroupAdapter(List<OrderAll.list> temp) {
     30         this.temp = temp; 
     31     }
     32     
     33     @Override
     34     public void notifyDataSetChanged() {
     35         map.clear();
     36         list.clear();
     37         //先把数据装到map里
     38         for (int i = 0; i < temp.size(); i++) {
     39             if(temp.get(i) instanceof list){            
     40                 List<list> tempList =  map.get(temp.get(i).getItemname());
     41                 if(tempList == null){
     42                     tempList = new ArrayList<OrderAll.list>();
     43                     tempList.add(temp.get(i));
     44                     map.put(temp.get(i).getItemname(),tempList);    
     45                 }else{
     46                     tempList.add(temp.get(i));
     47                 }
     48             }
     49 
     50         }
     51         //依据map的特性,键就是groupkey。值就是list
     52         Set<Map.Entry<String, List<OrderAll.list>>> set = map.entrySet();
     53         for (Iterator<Map.Entry<String, List<OrderAll.list>>> it = set
     54                 .iterator(); it.hasNext();) {
     55             Map.Entry<String, List<OrderAll.list>> entry = (Map.Entry<String, List<OrderAll.list>>) it
     56                     .next();
     57             OrderAll order = new OrderAll();
     58             OrderAll.list root = order.getNewList();
     59             root.setItemname(entry.getKey());
     60             root.setGroupkey(true);
     61             list.add(root);
     62             for (int i = 0; i < entry.getValue().size(); i++) {
     63                 entry.getValue().get(i).setGroupkey(false);
     64                 list.add(entry.getValue().get(i));
     65             }
     66         }
     67         super.notifyDataSetChanged();
     68     }
     69 
     70     @Override
     71     public int getCount() {
     72         return list.size();
     73     }
     74 
     75     @Override
     76     public Object getItem(int pos) {
     77         return list.get(pos);
     78     }
     79 
     80     @Override
     81     public long getItemId(int pos) {
     82         return pos;
     83     }
     84 
     85     @Override
     86     public View getView(final int position, View convertView, ViewGroup parent) {
     87         ClothesHolder clothesHolder = null;
     88         //非常低性能的做法,每次都重新初始化
     89         if (list.get(position).isGroupkey()) {        
     90             convertView = ViewUtil.buildView(R.layout.ch_racking_list_tag_row);
     91             clothesHolder = new ClothesHolder();
     92             clothesHolder.tvTagName = (TextView) convertView.findViewById(R.id.tvTagName);
     93             String itemName = list.get(position).getItemname();
     94             if(!ViewUtil.isStrEmpty(itemName)){
     95                 clothesHolder.tvTagName.setText(itemName);
     96             }
     97         }else{
     98             convertView = ViewUtil.buildView(R.layout.ch_racking_list_row);
     99             clothesHolder = new ClothesHolder();
    100             clothesHolder.ivImage = (ImageView) convertView.findViewById(R.id.ivImage);
    101             clothesHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
    102             clothesHolder.tvWenti = (TextView) convertView.findViewById(R.id.tvWenti);
    103             clothesHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
    104             String subitemName = list.get(position).getSubitemname();
    105             if (!ViewUtil.isStrEmpty(subitemName)) {
    106                 clothesHolder.tvName.setText(subitemName);
    107             }
    108 
    109             String price = list.get(position).getPrice();
    110             if (!ViewUtil.isStrEmpty(price)) {
    111                 clothesHolder.tvPrice.setText(price);
    112             }
    113 
    114             String wenti = list.get(position).getWenti();
    115             if (!ViewUtil.isStrEmpty(wenti)) {
    116                 clothesHolder.tvWenti.setText("问题!");
    117             }
    118             //网络加载图片,从别的服务器加载
    119             final String  url = list.get(position).getUrl();
    120             if (!ViewUtil.isStrEmpty(url)) {
    121                 if(ViewUtil.isuploadedphoto(url)){//网络图片
    122                     final ImageView temp=clothesHolder.ivImage;
    123                     new AsyncTask<Void, Void, Bitmap>() {
    124                         protected Bitmap doInBackground(Void... p) {
    125                             return ViewUtil.getHttpBitmap(url,60,60);
    126                         }
    127                         @Override
    128                         public void onPostExecute(Bitmap result) {
    129                             super.onPostExecute(result);
    130                             temp.setImageBitmap(result);
    131                         }
    132 
    133                     }.execute();
    134                 }else{
    135                     clothesHolder.ivImage.setImageBitmap(ViewUtil.extractMiniThumb(
    136                             ViewUtil.getFilePathBitmap(url), 60, 60));
    137                 }            
    138                 clothesHolder.ivImage.setImageBitmap(ViewUtil.extractMiniThumb(ViewUtil
    139                         .getFilePathBitmap(url), 60, 60));
    140             }
    141             //添加事件
    142             convertView.setOnClickListener(new View.OnClickListener() {
    143                 @Override
    144                 public void onClick(View v) {
    145                     BaseActivity.currentActivity.startCOActivity(CH_RackingListDetailActivity.class,
    146                                     OrderAll.CLOTHES_ID,list.get(position).getId());
    147                 }
    148             });
    149         }
    150         return convertView;
    151     }
    152 
    153     private class ClothesHolder {
    154         ImageView ivImage;
    155         TextView tvName;
    156         TextView tvTagName;
    157         TextView tvWenti;
    158         TextView tvPrice;
    159         
    160     }
    161 
    162 }

    acitivity只要传入数据集合就可以了

    1 private List<OrderAll.list> listclothes = new ArrayList<OrderAll.list>();
    2 private ListView lvClothes;
    3 private ClothesGroupAdapter adapter;
    4 adapter = new ClothesGroupAdapter(listclothes);
    5 lvClothes.setAdapter(adapter);
    6 
    7 listclothes.clear();
    8 listclothes.addAll(OrderData.getTempOrderAll().getList());
    9 adapter.notifyDataSetChanged();

    界面效果图

  • 相关阅读:
    关于共享单车的胡言乱语
    pyspark 编写 UDF函数
    mysql load本地文件失败,提示access denied
    如何去掉文件里的^M
    我错了一半?
    Spark-shell引入第三方包
    Fiddler如何抓取使用了SSL或TLS传输的Android App流量
    Burpsuite如何抓取使用了SSL或TLS传输的Android App流量
    Linux内核通杀提权漏洞CVE-2016-5195验证
    IOS APP安全评估工具 Snoop-it
  • 原文地址:https://www.cnblogs.com/chenjianxiang/p/3932988.html
Copyright © 2020-2023  润新知