2013-11-15 34 views
0

我使用AlertBox來選擇圖標。 這是使用自定義適配器完成的。我有一個來自ImageView的類,它改變舊的選定圖標的背景顏色。ImageView爲我的Android應用程序恢復背景顏色

所有的工作很好,我希望重新設置適配器中已轉換視圖的背景顏色。 getBackGroundDrawable總是返回null?任何想法 ???

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    JIconImageView imageView = ((convertView == null) ? new JIconImageView(m_context) : (JIconImageView)convertView); 

    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    imageView.setPadding(2, 2, 2, 2); 
    imageView.setIsSelected(m_selected == position); 
    imageView.setImageResource(JEntryIconHelper.getIconFromIndex(position)); 

    return imageView; 
} 

,並從公衆最後一類JIconImageView擴展的ImageView enter code here

public void setIsSelected(boolean bSelected) 
{ 
    if (m_bSelected = bSelected) 
     setBackgroundColor(SELECTED_BACKCOLOR); 
    else setBackgroundDrawable(m_background); 
} 
+0

你的意思是==(m_bSelected = bSelected)? – Snicolas

+0

我的回答有幫助嗎?如果是這樣,請註冊或標記爲正確答案。 –

回答

0

據我所知,有沒有簡單的方法來獲得當前的主題背景顏色。

做一個可靠的方法是在getView期間將原始背景顏色保存在成員變量中(或者您可以通過創建一次性JIconImageView來完成此操作)。例如,在您綁定適配器的位置:

JIconImageView imageView = new JIconImageView (...); 
Drawable origBackground = imageView.getBackground(); 
imageView = null; 

然後,在setIsSelected()中引用imageView.getBackground()。


另一種方法是使用xml選擇器;這正好在您的「繪項目」文件夾:

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
    android:state_selected="true" 
    android:drawable="@drawable/your_selected_drawable" /> 

    <item 
    android:drawable="@drawable/your_unselected_drawable" /> 
</selector> 

正如你所看到的,這個解決方案使用繪圖資源,而不是顏色,但如果你的圖標是固定的大小,這是一個微不足道的差異(也許類似的東西可以用做顏色 - 你必須研究)。這種方法的缺點是你現在已經硬編碼了背景顏色。不過,至少這些定義在你的資源中。


你可以通過引用您的圖標定義一個Android的風格,像這樣建在上面:在

<JIconImageView 
    android:id=... 
    android:background="@drawable/jicon_background_selector />