净坛腐儒 2016-07-14 07:35 采纳率: 43.8%
浏览 838
已采纳

超时则清除list中的element,刷新listview?

连续读取人员信息并将其以map形式添加到list当中,如果list中的一条人员信息在30s内未能再一次读到,则将list中的该条信息清除,请问各位前辈有什么实现办法?谢谢!我我采用下面代码并未得到正确结果

                                                        //确保list里面放的是不同对象map的堆地址,指向的是不同对象
                            Map<String, Object> map = new HashMap<String, Object>();

                            map.put("itemName", name);
                            //注意此处不可将Bitmap对象直接放入hashmap中,而应传入地址
                            map.put("itemPhoto", photoPath);

                            map.put("addTime",System.currentTimeMillis());
                            Log.v("map", map.toString());

                            //根据姓名查看list当中是否存在所有项
                            boolean exist = false;
                            for(Map<String, Object> tempMap : list){
                                if(name.equals(tempMap.get("itemName"))){
                                    exist = true;
                                    //如果有则更新时间
                                    tempMap.put("addTime", System.currentTimeMillis());
                                    break;
                                }
                            }
                            //如果不存在,则添加到list当中
                            if(!exist){
                                list.add(map);
                            }


                            Log.v("removeb2",list.toString());
                            //遍历list查看有无超时项,有则清空该项
                            Iterator<Map<String, Object>> it = list.iterator();
                            while(it.hasNext()){
                                if(System.currentTimeMillis()-Long.parseLong(it.next().get("addTime").toString())>30000){
                                    it.remove();
                                }
                            }

                        };   
                    }  


                    //将定时任务中获取的List装入ListView中

                    Message msg = new Message();  
                    msg.what = 1;  
                    handler.sendMessage(msg);  
                        switch (msg.what) {
            case 1:

                /*tv1.setText(null);
                tv2.setText(null);
                tv3.setText(null);
                img.setImageBitmap(null);*/

                SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,list,R.layout.activity_item,

                        new String[]{"itemName","itemPhoto"},//查询键值获取map中资源

                        new int[]{R.id.itemName,R.id.itemPhoto});//将获取的资源填入对应项
                adapter.notifyDataSetChanged();//刷新adapter从而达到刷新列表的目的。

                lv.setAdapter(adapter);

  • 写回答

1条回答

  • nomq 2016-07-14 09:13
    关注

    adapter、list写到成员变量里,new adapter()可以单开一个线程初始化然后提醒主线程listview.setadapter,增加和移除数据维护放到子线程,list更新后只需要用notify那个方法就行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)