我有一個自定義視圖,基本上看起來像按鈕的GridView。 gridview從沒有孩子開始,每次用戶按下按鈕時,都會添加另一個自定義視圖。GridView的孩子有時不繪圖
這有一些奇怪的行爲。我在onDraw中的自定義視圖上繪製文本,線條等東西,有時甚至會繪製它們。它們完全空白。在哪些視圖顯示或不顯示繪製的圖形方面,行爲似乎非常隨意。
我有一種感覺,這是與我做設置layoutparameters。我將子視圖存儲在一個數組中,並在getView()中返回與位置參數相關的視圖。所以我只爲每個職位創建過一次按鈕。
所以我有兩個問題。
我在做什麼導致這種情況?
我應該甚至使用gridview來做我正在做的事情嗎?
爲可查看該代碼:
public View getView(int position, View convertView, ViewGroup parent)
{
GridButton button;
GridView gridView = (GridView)parent;
if(childBuittons.size() <= position) //if we need to create a new button
{
button = createButton(position);
int nWidth = getButtonSize(gridView);
GridView.LayoutParams params = new GridView.LayoutParams(nWidth, nWidth);
button.setLayoutParams(params);
}
else //we already have a button that we created
{
button = buttons.get(position);
}
return button;
}
一些更多的信息: - 該gridbutton類只是一個擴展查看和覆蓋的onDraw畫一些圖形,如文本和線條 類 - 即時通訊試圖實現的是用戶可以添加或刪除的正方形網格(儘管它們不會經常這樣做),然後按方塊來執行某些功能 - 可能會有更多的正方形比可以放入屏幕
感謝您的回覆。我更新了我的問題,希望能提供更多信息。我理解整個回收事件(或者我不知道) - 我只是認爲返回已經創建並存儲並設置的視圖會更有效率,而不是每次都重新初始化該視圖。 – gcb 2013-02-24 16:14:16
@gcb 'GridView'的回收機制綽綽有餘(以及處理事物的推薦方式)。如果你還沒有解決這個問題,也許你可以發佈自定義視圖的'onDraw方法。 – Luksprog 2013-02-28 11:33:19
實際上,我決定嘗試一個gridlayout,它對於我想要做什麼並且完美地工作更有意義。 – gcb 2013-03-01 12:37:39