ListView中动态刷新数据的另类方法
前阵子有个需求,一个显示视频的listview,每个item中包含点播次数,点击一次立即加1,并动态显示在界面上。看了好多资料,拜读了很多帖子,也试了很多方法,用notifyDataSetChanged()都不行。看到优酷客户端(塞班系统的)也不能更新次数,本来都泄气了,结果被论坛里一个牛人说:“你很强,研究出来分享下”,硬着头皮上呗。但我觉得理论上肯定是可以实现的,经过艰苦卓绝的尝试,终于皇天不负有心人。现在和大家分享一下经验,相信一定对很多人的应用有用,也欢迎大家拍砖。
1.在点击item的监听程序onItemClick()中调用播放方法并加1,发送消息给handler更新次数
private void updatePalyNum(final int position) { new Thread() { public void run() { try { boolean updateFlag = videoWS.updateData(getString(R.string.WSURL_update),newsList.get(position).getVideoID()); if(updateFlag){ int playNum=Integer.parseInt(newsList.get(position).getPlayNum());playNum++; newsList.get(position).setPlayNum(playNum+""); Uri uri = Uri.parse(newsList.get(position).getUrl());Intent intent = new Intent(Intent.ACTION_VIEW,uri);intent.setType("video/*");intent.setDataAndType(uri , "video/*");startActivity(intent); Thread.sleep(400); handler.sendEmptyMessage(5); } }catch (InterruptedException e) { e.printStackTrace(); } } }.start(); }
?2.handler处理刷新listview
case 5:listAdapter=null; listView.setAdapter(getAdapter(newsList));break;
?这个方法我不知道是不是正规,希望高手指点。另外还有一点问题就是每次重新加载都是在第一页,如果当时您不在第一页播放的话播放完回来就找不着北了,不过这个问题理论上也是可以解决的。