2013-11-15 137 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; 
    } 
}); 
相关问题