格式化

廣告

廣告2

2013年7月21日 星期日

[Android app開發基本概念] ListView中getChildAt()的使用範例


在很多時候ListView列表數據不需要全部刷新,只需刷新有數據變化的那一條,這時可以用getChildAt(index)獲取某個指定position的view,並對該view進行刷新。

注意:在ListView中,使用getChildAt(index)的取值,只能是當前可見區域(列表可滾動)的子項!
  • 即取值範圍在 >= ListView.getFirstVisiblePosition() &&  <= ListView.getLastVisiblePosition();
  1. 所以如果想獲取其他的部分將會出現返回Null值空指針問題;
  2. getChildCount跟getCount獲取的值將會不一樣(數量多時);
  3. 如果想更新某一行數據,需要配合ListView的滾動狀態使用,一般不滾動時才加載更新數據
範例程式:

  listView.setOnScrollListener(new OnScrollListener()
  {

   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState)
   {
    scrollStates = scrollState;
    if (scrollStates == OnScrollListener.SCROLL_STATE_IDLE)
    {
     for (int i = firstVisibleItem; i < visibleItemCount; i++)
     {
      eLayout = (RelativeLayout) listView.getChildAt(i);
      TextView moneyTextView = (TextView) eLayout.findViewById(R.id.detail_money);
      //這裡便可以對每一列的View做findViewById()的運算
     }
    }
   }

   @Override
   public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
   {
    this.firstVisibleItem = firstVisibleItem;
    this.visibleItemCount = visibleItemCount;
   }
  });

沒有留言 :