我有一個列表視圖 列表視圖中的每一行都有450dp的高度,例如 因此在大多數情況下,listview將呈現在MOST 3項當時。Android列表視圖項目未在setVisibility(View.VISIBLE)之後繪製
當列表視圖最初加載時,每行只是一個帶有「顯示詳細信息」按鈕的圖像(全部包含在相對佈局中)當用戶單擊按鈕時,它會隱藏當前相對佈局通過調用setVisibility(View.GONE)創建一個圖像和一個按鈕,並通過調用setVisibility(View.VISIBLE)來顯示另一個視圖(LinearLayout)。
記住BOTH相對佈局和Linear Layout駐留在相同的xml中, Adapter.getView(),我只是在可見性方面切換其中一個。
問題是,在線性佈局上調用setVisibility(View.VISIBLE)後,它不顯示。它確實成功隱藏了相對佈局,但沒有出現線性佈局。
它只會在列表視圖中的新項目需要通過上下滾動列表視圖呈現後纔會出現。
我如何強制相對佈局顯示?通過強制重繪?我試圖通過調用invalidate,它沒有工作。
我也試過requestLayout,但是再次沒用。我也試過notifyDataSetChanged(),它沒有工作,我不認爲我應該調用它,因爲適配器中的數據沒有改變,我簡單地隱藏和顯示一個新的視圖。
請幫助
編輯: 基於butcode的幫助,但沒有奏效
for(int i=start, j=list.getLastVisiblePosition();i<=j;i++) {
if(list.getItemAtPosition(vh.position)==list.getItemAtPosition(i)){
final View view = list.getChildAt(i-start);
final int index = i;
view.requestLayout();
lv.invalidateChild(view, new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
runOnUiThread(new Runnable() {
@Override
public void run(){
//lv.invalidateChild(view, new Rect(view.getLeft(),
//view.getTop(), view.getRight(), view.getBottom()));
lv.requestChildRectangleOnScreen(view, new Rect(view.getLeft(),
view.getTop(), view.getRight(), view.getBottom()), false);
view.requestLayout();
list.getAdapter().getView(index, view, list);
}
});
break;
}
}
你打電話notifyDataSetChange()方法的onclick您的按鈕嗎? – Ankit 2013-04-22 17:54:45