android tablelayout 点击,TableLayout中的单击事件的问题

我在学习Android的路径中遇到了另一个问题。我用CSV文件的内容制作了一个动态的TableLayout。我需要当我点击/触摸表格中的一行时,颜色应该改变,稍后点击按钮可以获得同一行的内容。现在我对第一部分感到困惑,当然我不知道如何获得该行的数据。

我宣布的LinearLayout表里面,这也是一个滚动型的内部,我的布局具有以下属性:

android:id="@+id/scrollMotors"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentRight="true"

android:layout_alignParentTop="true"

android:layout_alignParentBottom="true"

android:layout_marginLeft="50dp"

android:layout_marginRight="50dp"

android:layout_marginTop="90dp"

android:layout_marginBottom="50dp" >

android:id="@+id/layoutMotors"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/tableMotors"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:clickable="true"

android:focusable="true"

android:focusableInTouchMode="true"

android:gravity="center_vertical"

android:stretchColumns="*" >

在我的Java代码后,我宣布该行的创建:

//Initialization of my table

my_tableMotors = (TableLayout) findViewById(R.id.tableMotors);

//This is an ArrayList> that contains the lines of the CSV file,

//I use this variable as a dynamic Matrix because my CSV file can change its dimensions.

m = valuesFile.size();

for (n = 0 ; n < m ; n++)

{

//Declaration and initialization of my rows

final TableRow line = new TableRow(MotorActivity.this);

//Setting the parameters of my row

line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

line.setFocusable(true);

line.setFocusableInTouchMode(true);

line.setClickable(true);

//Initialization of my TextViews that are gonna be the content of each one of the rows in the dynamic TableLayout

myCol1 = new TextView(MotorActivity.this);

myCol2 = new TextView(MotorActivity.this);

myCol3 = new TextView(MotorActivity.this);

myCol4 = new TextView(MotorActivity.this);

j = valuesFile.get(n).size();

for (i = 0 ; i < j ; i++)

{

switch(i)

{

case 0:

if (n == 0)

{

myCol1.setText("Line");

}

else

{

myCol1.setText(valuesFile.get(n).get(i)); //Sets value for the column

}

line.addView(myCol1);

break;

case 1:

myCol2.setText(valuesFile.get(n).get(i)); //Sets value for the column

line.addView(myCol2);

break;

case 2:

myCol3.setText(valuesFile.get(n).get(i)); //Sets value for the column

line.addView(myCol3);

break;

case 3:

myCol4.setText(valuesFile.get(n).get(i)); //I use this variable for some other purpose

break;

}

}

my_tableMotors.addView(line);

}

my_tableMotors.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {onClickedRow(); }});

}

从我所看到和读到这里,最好是使用setOnClickListener,这就是我使用的是什么了一下两个不同的答案,我发现这里的:

public void onClickedRow()

{

m = my_tableMotors.getChildCount();

for (n = 0 ; n < m ; n++)

{

if (my_tableMotors.getChildAt(n).hasFocus())

{

my_tableMotors.setBackgroundColor(myColor);

}

}

}

现在我无法得到任何关注tableLayout,所以请如果你看到我的代码中有什么问题,或者如果你知道如何帮助我,我会很感激它!

非常感谢提前:)。

编辑1

我发现获取焦点的方式。我改变了方法,而不是整个TableLayout只求的TableRow,就这么结束了,因为这:

* 之前 *

my_tableMotors = (TableLayout) findViewById(R.id.tableMotors);

m = valuesFile.size();

for (n = 0 ; n < m ; n++)

{

//Declaration and initialization of my rows

final TableRow line = new TableRow(MotorActivity.this);

/*Other declarations*/

j = valuesFile.get(n).size();

for (i = 0 ; i < j ; i++)

{

/*Code*/

}

my_tableMotors.addView(line);

}

my_tableMotors.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {onClickedRow(); }});

}

* 后 *

my_tableMotors = (TableLayout) findViewById(R.id.tableMotors);

m = valuesFile.size();

for (n = 0 ; n < m ; n++)

{

//Declaration and initialization of my rows

final TableRow line = new TableRow(MotorActivity.this);

/*Other declarations*/

j = valuesFile.get(n).size();

for (i = 0 ; i < j ; i++)

{

/*Code*/

}

line.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {onClickedRow(); }});

my_tableMotors.addView(line);

}

我还对如何设置线条颜色进行了更改:

* *

my_tableMotors.setBackgroundColor(myColor);

* 之前之后 *

my_tableMotors.getChildAt(n).setBackgroundResource(R.drawable.myColor);

现在我很忙,发现如何获得来自的TableRow的数据。只要我得到解决方案或你的答案,我想我的问题解决了!

EDIT 2

随着@Luksprog的帮助下,我能找到一个答案,我的检索内容的问题!我没有使用下一个代码中使用了他的解决方案:

public void onClickedRow()

{

TableRow clickedRow = new TableRow(MotorActivity.this);

m = my_tableMotors.getChildCount();

for (n = 1 ; n < m ; n++)

{

if (my_tableMotors.getChildAt(n).isFocused())

{

my_tableMotors.getChildAt(n).setBackgroundResource(R.drawable.highlightTableRow);

clickedRow = (TableRow) my_tableMotors.getChildAt(n);

j = clickedRow.getChildCount();

for (i = 0; i < j ; i++)

{

switch(i)

{

case 0:

myField1 = (TextView) clickedRow.getChildAt(i);

break;

case 1:

myField2 = (TextView) clickedRow.getChildAt(i);

break;

case 2:

myField3 = (TextView) clickedRow.getChildAt(i);

break;

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值