2012-01-07 153 views
0

以下顯示的代碼和截圖顯示listview中的數據,其中包含3個textview無法在getView方法中正確設置背景圖片

我試過getView()方法Adapter類中的以下代碼,給背景圖像交替行,即行號。 0,2,4等。

當我嘗試實現這一點時,我得到了如屏幕截圖所示的輸出,即行沒有得到適當的影響。

另外,請參考下面xml其中alignTopalignBottom參數被使用,仍然在Index按鈕點擊,第二和第三textview沒有適當得到背景顏色。

編輯 - 如果我使用顏色代替背景圖片,它適用於除Index按鈕以外的所有情況。

if (count % 2 == 0) { 

    try { 

     InputStream is = ctx.getAssets().open("cellbg.png"); 
     Drawable d = Drawable.createFromStream(is, "cellbg"); 
     holder.txtFirst.setBackgroundDrawable(d); 
     holder.txtSecond.setBackgroundDrawable(d); 
     holder.txtThird.setBackgroundDrawable(d); 
     Log.v("count=", "" + (count++)); 

    } catch (Exception e) { 
     throw new Error(" exception in TableListAdapter " + e.getMessage()); 
    } 
} else { 
    Log.v("else count==", "" + (count++)); 
}  

列表結構(XML)

<TextView 
     android:id="@+id/FirstText" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/SecondText" 
     android:layout_width="55dp" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/FirstText" 
     android:layout_alignBottom="@+id/FirstText"/> 

    <TextView 
     android:id="@+id/ThirdText" 
     android:layout_width="40dp" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/FirstText" 
     android:layout_alignBottom="@+id/FirstText"/> 

第一屏幕顯示在應用程序啓動時,在默認情況下,Gainers按下按鈕,列表結構。

第2個顯示按下Index按鈕的實例。

第3個顯示按下索引按鈕後再次按下Gainers按鈕的實例。

第4個顯示點擊List item時的佈局。

我在做什麼錯?

任何幫助都將是生命保護!事情

screen

回答

1

夫婦....不知道什麼不同的按鈕,以及他們做的,但它不應該的問題是什麼?

你應該設置背景也當(count % 2 != 0)因爲這些視圖可以在列表中重用,所以最好是安全的。

此外,而不是單獨設置不同的TextViews的背景下,爲何不將其設置爲僅包含所有這些TextViewsViewGroup(我想象一個LinearLayout或類似的東西)?

只是爲了仔細檢查,count是你在調用getView時得到的參數嗎? 也許你可以發佈更多的代碼getView方法,這可能會有所幫助(獲得更好的答案)。

+0

由於一噸BUDDY ...只需添加'holder.l1.setBackgroundDrawable(d);'到位設置背景每個TextView的和它的工作。 但我沒有得到爲什麼我應該設置背景時(計數%2!= 0),因爲在這種情況下,表bg將自動使用。 – GAMA 2012-01-07 07:31:00

+0

這一切都取決於你的getView方法......爲了讓它更快,你應該重用視圖(這就是convertView參數),在這種情況下,你應該始終設置背景,因爲你不知道你會得到什麼。 – Matthieu 2012-01-07 07:35:41

+0

但是如果我想爲每個文本框分配不同的背景圖片呢? – GAMA 2012-01-07 07:38:26

0

您使用setbackgrounddrawable但我認爲你必須使用下面的代碼來設置圖像

holder.txtFirst.setImageResource(R.drawable.Imagename); 
1

這看起來是一個視圖重用的問題是,而是因爲我沒有看到,我不能肯定部分代碼。在您的getView中,您是否重用了視圖(即,您是否使用convertView參數)?如果你這樣做,那就是你的答案。您必須始終將背景設置爲所需的顏色。事情是這樣的:

if (count % 2 == 0) { 
    ... 
    holder.txtFirst.setBackgroundDrawable(d); 
} else { 
    holder.txtFirst.setBackgroundDrawable(myDefaultRowColor); 
}