我在Android中创建了一个电子表格,用于显示使用TableRow进行数据搜索的结果。 TableRows是动态创建的,因此一次最多可显示30行。
我正在尝试在用户触摸行时切换行的背景颜色,并且可以使用android:onClick事件轻松更改背景颜色。但是,一旦单击该行并且颜色发生变化,当启动另一个android:onClick事件时,我无法切换颜色。
那么如何确定TableRow的颜色状态,以便构建适当的控制流并适当地切换颜色?有很多关于如何设置背景颜色的例子,但在获取背景颜色方面没有任何帮助。
由于
答案 0 :(得分:0)
试试这个:
// save old view style
Drawable defaultViewStyle = view.getBackground();
// set new style
view.setBackgroundResource(R.drawable.new_view_style);
// return default view style
view.setBackgroundDrawable(defaultViewStyle);
但我认为这不是正确的方法。最好覆盖视图的所有可能条件:
// res drawable my_table_row_style:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/my_table_row_style_selected"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/my_table_row_style_selected"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/my_table_row_style_selected"/>
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/my_table_row_style_default"/>
</selector>
答案 1 :(得分:0)
示例:
int MyPosition=100000;
...
...
onclick()
{
if(MyPosition==100000)
{
//first time selection
MyPosition=a//a=any int position
//change bg of selected row
}
else
{
//now u r selecting second or N th time
//so first set previous bg of MyPosition
//and clear MyPosition
//Now set bg of current bg nd set MyPosition
}
}
答案 2 :(得分:0)
您可以保存setTag()设置的颜色,并通过getTag()进行检索。
void OnClick(View v)
{
Integer color = v.getTag();
if (null == color) // not clicked yet
{
color = COLOR_NOT_TOGLED;
}
if (COLOR_NOT_TOGLED == color)
{
color = COLOR_TOGLED;
}
else
{
color = COLOR_NOT_TOGLED;
}
v.setBackGround(color);
v.setTag(color); // save
}
<强>更新强> 好的,我们来解决它))
void OnClick(View v)
{
Object o = v.getTag();
Integer color = (null == o) ? COLOR_NOT_TOGLED : (Integer) o;
if (COLOR_NOT_TOGLED == color) {
color = COLOR_TOGLED;
} else {
color = COLOR_NOT_TOGLED;
}
v.setBackgroundColor(color);
v.setTag(color); // save
}
答案 3 :(得分:0)
如果您查看setBackgroundColor()
的源代码,就会看到它的工作原理:
TableRow tr = (TableRow)v;
Drawable bg = tr.getBackground();
int oldColor = ((ColorDrawable) bg.mutate()).getColor();