我正在尝试创建一个表来显示我的数据库内容,我希望我的应用程序的用户可以选择表的特定行。并且与其他行相比,所选行具有不同的背景。 我想动态添加所有东西,所以我有以下代码用于我的TableView(这段代码是测试,还没有连接到数据库)。
RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
TableLayout MainLayout = new TableLayout(this);
MainLayout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.FILL_PARENT));
MainLayout.setStretchAllColumns(true);
//Create the first row and add two text views
TableRow row1 = new TableRow(this);
TextView text1 = new TextView(this);
text1.setText("Test1\n");
text1.setGravity(android.view.Gravity.CENTER);
TextView text2 = new TextView(this);
text2.setText("Test2");
text2.setGravity(android.view.Gravity.CENTER);
row1.addView(text1);
row1.addView(text2);
row1.setBackgroundResource(R.drawable.row_selector);
MainLayout.addView(row1);
我的 row_selector.xml 是:
<!-- language: xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/green" />
<item android:state_selected="true" android:drawable="@color/red" />
<item android:state_focused="true" android:drawable="@color/blue" />
<item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
</selector>
我在 colors.xml 中定义了值中的绿色/红色/蓝色。 但是当我运行我的应用程序并单击该行时,没有任何变化,背景颜色保持透明。我已将透明更改为红色,即使单击后颜色仍保持红色。所以我知道表行已正确连接到row_selector.xml,但它无法正常工作。
为什么颜色不会改变?
更新:
我使用$row1.setClickable(true)$
并且它正常工作。 (当我点击该行时它变成蓝色)。那么在我选择另一行之前,如何为所选行设置特定颜色。我的意思是我只希望最后选择的行有不同的颜色。
答案 0 :(得分:0)
我自己添加以下代码:
row1.setBackgroundResource(R.color.blue);
row2.setBackgroundResource(R.color.blue);
row1.setId(10001);
row2.setId(10002);
View.OnTouchListener rowClick = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(lastRowId>0){
((TableRow)findViewById(lastRowId)).setBackgroundResource(R.color.blue);
}
lastRowId = v.getId();
v.setBackgroundResource(R.color.red);
return true;
}
};
row1.setOnTouchListener(rowClick);
row2.setOnTouchListener(rowClick);