ListView点击事件异常 10C

自己写了一个小应用,在定时器中定时更新list,在handle中刷新ListView,同时ListView还有一个点击响应事件,现在点击LIstView时,偶尔会出现如下异常:
图片说明
不知道是什么原因,还请给位前辈指教!谢谢!
图片说明

 ListView lv = (ListView)findViewById(R.id.listView1);
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

                TextView tv0 = (TextView)findViewById(R.id.textview0);
                TextView tv1 = (TextView)findViewById(R.id.textview1);
                TextView tv2 = (TextView)findViewById(R.id.textview2);
                TextView tv3 = (TextView)findViewById(R.id.textview3);
                ImageView img = (ImageView)findViewById(R.id.imageView1);

                List<Map<String, Object>> listenList = tempList;
                String name = listenList.get(arg2).get("itemName").toString();//从选中的item(map)中取出姓名
                tv1.setText(" 姓名:"+name);

                int k = 0;
                Sheet sheet = null;
                try{
                    Workbook wb = Workbook.getWorkbook(xlsFile);
                    sheet = wb.getSheet(0);
                    /*Cell[] col1Arr = sheet.getColumn(1);

                    for(k=1;k<sheet.getRows();k++){
                        if(col1Arr[k].getContents() == name){
                            break;
                        }
                    }*/
                    for(k=1;k<sheet.getRows();k++){
                        if(sheet.getCell(1, k).getContents().equals(name)){//.equals(),面向对象方法
                            break;
                        }
                    }

                }catch(IOException e){
                    e.printStackTrace();
                }catch(BiffException e){
                    e.printStackTrace();
                }

                String cardID = sheet.getCell(0, k).getContents();//0列k行
                tv0.setText(" 卡号:"+cardID);

                String age = sheet.getCell(2, k).getContents();//2列k行
                tv2.setText(" 年龄:"+age);

                String depart = sheet.getCell(3, k).getContents();//3列k行
                tv3.setText(" 部门:"+depart);

                String photoPath0 = Environment.getExternalStorageDirectory().toString() + "/picSrc/";
                String photoPath = String.format("%s%s.bmp",photoPath0,name);
                Bitmap bitmap = getLoacalBitmap(photoPath);
                img.setImageBitmap(bitmap);

            }
        });

4个回答

我的想法是,点击响应事件在主线程中,更新ListView操作同样在主线程中,这样在一些情况下就会出现冲突,不知道是不是这个原因,如果是的话,该如何解决呢,谢谢!

采用后端写一个线程控制,从前端线程分离出来

the content of the adapter has changed but listview did not receive a notification.
适配器的内容已经改变但listview没有收到通知。listview 没有收到notification之前 adapter 已经改变了。你在将listview设置给adapter之前,刷新了adapter
make sure the content of your adapter is not modified from a background thread,but only from the ui thread.
确保你的适配器修改的内容从一个后台线程,而不是ui线程。
make sure your adapter calls notifydatasetchanged() when its content changed.
确保当其内容发生了变化时,适配器调用notifydatasetchanged()。

点击事件里面,添加这么多操作我也是醉了。一个界面加载上来应该先 initView,然后initData。当有点击事件时候,耗时操作记得放到子线程。activity的反应时间为5s,耗时5s,你的程序就卡死了。

点击事件的时候你可以吧定时器kill掉,然后去响应事件刷新listview,之后再开启定时器!这样是不是可以呢?

a739924135
净坛腐儒 能不能简单给几行代码,万分感谢!
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐