View的setSelected()与invalidate()

问题:

最近在运用ListView做刷新操作时,由于刷新不及时,导致列表布局混乱(前一行的某些布局元素被画在了后一行)。

 

解决方案:

1、首先想到需要进行重画,于是调用其invalidate()方法,不管用,后来发现用手指触摸时马上能恢复正常布局,于是:

2、调用ListView的setSelected(!ListView.isSelected())方法,这样就能及时刷新布局,目前还不知道具体的原理,先贴下setSelected()的源代码,供后续分析:

(URL: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java

 1 public void setSelected(boolean selected) {
 2         if (((mPrivateFlags & SELECTED) != 0) != selected) {
 3             mPrivateFlags = (mPrivateFlags & ~SELECTED) | (selected ? SELECTED : 0);
 4             if (!selected) resetPressedState();
 5             invalidate(true);
 6             refreshDrawableState();
 7             dispatchSetSelected(selected);
 8             if (AccessibilityManager.getInstance(mContext).isEnabled()) {
 9                 notifyAccessibilityStateChanged();
10             }
11         }
12     }
posted @ 2012-11-05 18:47  i小不  阅读(439)  评论(0)    收藏  举报