1、ListView的頭部嵌套一個NoscrollListView,數據刷新時發現,NoscrollListView的adapter數據都更新了,但是視圖上需要“點擊一下”纔會更新顯示;(不明原因)
第一步,讓NoscrollListView獲取焦點解決顯示問題:更新NoscrollListView的adapter時,NoscrollListView獲取焦點 requestFocus(),能實現視圖更新,但是NoscrollListView列表樣式上的點擊事件無效了;
第二步,在NoscrollListView被touch時取消焦點從而恢復列表樣式的點擊事件:重寫NoscrollListView的 onInterceptTouchEvent(),當NoscrollListView請求焦點的同時,設置onInterceptTouchEvent()返回true(即攔截touch事件),給NoscrollListView設置 setOnTouchListener監聽,在監聽中設置onInterceptTouchEvent()返回false(取消touch事件攔截),並判斷NoscrollListView是否 isFocused(),要是有焦點,則 clearFocus()並dispatchTouchEvent,從而在列表樣式的按鈕被點擊時解除NoscrollListView的焦點並讓點擊事件傳達到按鈕上。
public class NoScrollListView extends ListView {
public NoScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public NoScrollListView(Context context) {
super(context);
}
public NoScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return isIntercept != -1 ? true : super.onInterceptTouchEvent(ev);
}
private int isIntercept = -1;
public void setIntercept(boolean intercept) {
if (intercept)
isIntercept = 1;
else
isIntercept = -1;
}
}
2、“精彩評論”、“最新評論”的回覆刷新方案
第一步,數據前提是隻有第一頁數據上有“精彩評論”,“最新評論”是分頁的,當page大於1時不存在精彩數據;
第二步,不論回覆的是精彩還是最新裏的評論,按照回覆index計算page爲1的,更新page=1的數據(精彩、最新都數據更新、視圖更新);
第三步,若是回覆的是精彩評論,並且目標評論所在最新評論裏的pageN>1,那麼先更新page=1的數據(精彩、最新都數據更新、視圖更新),再更新page=pageN的數據(最新數據更新、視圖更新);
第四步,若是回覆的是最新評論,並且目標評論所在最新評論裏的pageN>1,那麼先更新page=pageN的數據(最新數據更新、視圖更新),再更新page=1的數據(精彩、最新都數據更新、視圖更新)。
3、“回覆消息時,監聽軟鍵盤隱藏的消息在回覆消息完成後調用隱藏軟件盤的指令之前執行”
原因在於BaseActivity中有“觸碰到非EditText類型的View時,自動隱藏軟件盤”的邏輯,當點擊發送按鈕的時候,軟鍵盤就已經收到“隱藏指令”了。
4、另外,發現基於軟鍵盤顯隱做的“輸入框”位置調整(setLayoutParamer),評論列表內容越多,視圖調整的卡頓越明顯,還未找到優化方案