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 }

浙公网安备 33010602011771号