2013-11-15 136 views
0

在我的android應用程序中有一個表格佈局,它在運行時加載。我已經實現了一個代碼,當單擊該行時更改此表的背景顏色。Android:點擊時改變表格的行顏色,點擊表格的其他行時刪除顏色

private OnClickListener trOnClickListener = new OnClickListener() { 
    public void onClick(View v) { 
     TableRow tablerow = (TableRow)v; 

     tablerow.setBackgroundDrawable(getResources().getDrawable(
       R.drawable.table_row_selector)); 


    } 
}; 

現在我想刪除這種顏色,當用戶點擊表的另一行,新點擊的行應該改變它的顏色。

這是我的drawable。

<?xml version="1.0" encoding="utf-8"?> 

<item android:drawable="@drawable/ab_stacked_solid_whiteaction" android:state_pressed="true"/> 
<item android:drawable="@drawable/table_shape" android:state_enabled="true"/> 

任何建議都高度讚賞。

感謝名單中advcance

+1

請出示代碼爲您繪製如果它的XML資源文件。 – Neil

+0

@Neil我編輯了我的問題。 Plz幫我解決這個問題 – Rose18

回答

1

更改繪製到這個樣子

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/background_selected" android:state_enabled="true" 
      android:state_pressed="true"/> 
    <item android:drawable="@drawable/background_selected" android:state_enabled="true" 
      android:state_focused="true"/> 
    <item android:drawable="@drawable/background_selected" android:state_enabled="true" 
      android:state_selected="true"/> 
    <item android:drawable="@drawable/background_selected" android:state_active="true" 
      android:state_enabled="true"/> 

    <item android:drawable="@drawable/background_selectable" android:state_pressed="false"/> 
    <item android:drawable="@drawable/background_selectable" android:state_focused="false"/> 
    <item android:drawable="@drawable/background_selectable" android:state_selected="false"/> 
    <item android:drawable="@drawable/background_selectable" android:state_active="false"/> 
</selector> 

然後,設置你的排到tablerow.setSelected(true)。當選擇了另一行,以前選擇的行tablerow.setSelected(false)和新選定的行設置爲true

我用這個在我ListViews之一,它的工作原理。

希望這有助於

+0

如何識別表格行。我用過tr.setTag()。我可以用它來識別上一個選定的行和新選定的行嗎? – Rose18

+0

您必須將選定的視圖保存在某種全局變量或類似的東西中。您在onClick(View v)中獲得視圖,因此可能使用該視圖。類似於v.setSelected(true)和currentSelected.setSelected(false),然後是currentSelected = v; – Neil

+0

是的,它是一個全局變量,你必須設置。只要做一次檢查,如果它是第一次你設置爲false – Neil

0

如果從XML使用選擇這樣做,並應用作爲背景或來源..

0

創建一個域:查看restoredView

row.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (restoredView != null) { 
      restoredView.setBackgroundColor(Color.parseColor("#EEEEEE")); 
     } 
     view.setBackgroundColor(Color.parseColor("#DDDDDD")); 
     restoredView = view; 
    } 
}); 
相關問題