ListView如何单独刷新一个item
扣扣技術交流群:460189483
對于ListView數(shù)據(jù)的刷新大家都知道,改變Adapter的數(shù)據(jù)源,然后調(diào)用Adapter的notifyDateSetChanged()方法即可。
但是我在做公司項目的時候,我的listview有幾個item,只有一個item數(shù)據(jù)需要實時更新,其它都是圖片跟文字,不需要更新。因為要實時更新,所以要不停的調(diào)用notifyDateSetChanged刷新數(shù)據(jù)。這樣會不停的重新繪制整個listview的界面,性能開銷非常大。而且item有圖片的話,每個item的圖片都需要重新加載,就算圖片做了內(nèi)存緩存,刷新一下圖片也會閃一下,不停的刷新就會導致各個item的圖片不停的閃,體驗一點都不好。
那么對于上面問題,有沒有解決辦法呢?當然是有的。我們可以針對某一個item進行局部更新,而不影響其它沒有修改的item。那么具體如何實現(xiàn)的呢?有兩種實現(xiàn)方式,一種是使用ListView適配器中的ViewHolder找到TextView,另一種是通過API找到,代碼見如下
private void updateItem(int itemIndex){if(listView == null){return;}//獲取第一個可以看到的item位置int firstVisiblePosition=listView.getFirstVisiblePostion();//獲取最后一個可以看到的item位置int lastVisiblePosition=listView.getLastVisiblePostion();//判斷是否在范圍內(nèi)if ((itemIndex >= firstVisiblePosition && itemIndex<=lastVisiblePosition) {//得到要更新的item的viewView view = listView.getChildAt(itemIndex - firstVisiblePosition);//方法一:獲取ViewHolder,間接獲取TextViewViewHolder viewHolder = (ViewHolder)view.getTag();//獲取TextViewTextView tv_item = viewHolder.tv_item;//更改數(shù)據(jù),其實兩步可以合并一步viewHolder.tv_item.setText("hello")tv_item.setText("hello");//方法二,直接獲取TextViewTextView tv_item = view.findViewById(R.id.tv_item);tv_item.setText("hello");} }2種方法哪種更高效留給自己考慮,親測都沒有問題
我個人比較傾向于使用第一種,可擴展性比較強!
如果要把ListView中所有需要實時顯示的item都更改怎么弄呢?其實只需要稍微修改就可以了,見如下代碼:
private void updateItem(){if(listView == null){return;}//獲取第一個可以看到的item位置int firstVisiblePosition=listView.getFirstVisiblePostion();//獲取最后一個可以看到的item位置int lastVisiblePosition=listView.getLastVisiblePostion();//判斷是否在范圍內(nèi)for (int i = firstVisiblePosition; i <= lastVisiblePosition; i++) {//得到要更新的item的viewView view = listView.getChildAt(i);//方法一:獲取ViewHolder,間接獲取TextViewViewHolder viewHolder = (ViewHolder)view.getTag();//獲取TextViewTextView tv_item = viewHolder.tv_item;//更改數(shù)據(jù),其實兩步可以合并一步viewHolder.tv_item.setText("hello")tv_item.setText("hello");//方法二,直接獲取TextViewTextView tv_item = view.findViewById(R.id.tv_item);tv_item.setText("hello");} }?
總結
以上是生活随笔為你收集整理的ListView如何单独刷新一个item的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位坐标分类
- 下一篇: 航模遥控器FM/PCM与FM/PPM区别