ListView或者说Adapter的刷新方式

当ListView中的数据发生了改变,我们希望刷新ListView中的View时,有两种方式:
第一种,全部刷新:
进行adapter.NotifyDataSetChanged();
看一下它的源码

  1. public void notifyChanged() {   
  1.     synchronized (mObservers) {   
  1.         // 向每一个子View发送onChanged   
  1.         for (int i = mObservers.size() - 1; i >= 0; i--) {   
  1.             mObservers.get(i).onChanged();   
  1.         }   
  1.     }   
  1. }

第二种,单个View刷新:
第一种方式:我们可以发现它针对每一个子View都做了刷新,当然,如果我们的数据都变量还可以理解。但是,一般条件下,我们需要更新的View不多。频繁的调用 NotifyDataSetChanged方法,刷新整个界面不合适。这样会把界面上显示的所有item都全部重绘一次,即使只有一个view的内容发生 了变化。
所以,我们可以写一个update的方法,来单独刷新一个View
  1. private void updateView(int itemIndex){   
  1.     intvisiblePosition = yourListView.getFirstVisiblePosition();   
  1.     Viewv = yourListView.getChildAt(itemIndex - visiblePosition);   
  1.          ViewHolder viewHolder =(ViewHolder)v.getTag();   
  1.          if(viewHolder!= null){   
  1.                viewHolder.titleTextView.setText("我更新了");   
  1.          }      
  1. }   
其中itemIndex为你想更新的items序号。


你可能感兴趣的:(Android)