我看到了这个链接(http://stackoverflow.com/questions/6603868/android-onclicklistener-and-table-layout)这似乎对提问者有效。话虽如此,这是我的处境。
我有一个TableLayout,它动态地填充了四列数据。行作为一个整体需要是可点击的,因为没有像上面链接的例子那样的按钮。
单击的行需要传递其第一列(第0列)的数据,该数据只是一个字符串。这是为创建新行而调用的函数。
private void addLotTableRow(CharSequence [] row, int count) {
final TableLayout table = (TableLayout) findViewById(R.id.lotsTableList);
final TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.lotsrow, null);
TextView tv;
// Fill Cells
tv = (TextView) tr.findViewById(R.id.lotCell1);//Cell 1: Lot Number
tv.setText(row[0]);
tv = (TextView) tr.findViewById(R.id.lotCell2);//Cell 2: Sample
tv.setText(row[1]);
tv = (TextView) tr.findViewById(R.id.lotCell3);//Cell 3: Inspected
tv.setText(row[3]);
tv = (TextView) tr.findViewById(R.id.lotCell4);//Cell 4: Total
tv.setText(row[2]);
table.addView(tr);
}
因此,我最初尝试制作一个tr.setOnClickListener(new View.OnClickleListener(){等等});在这个函数中,就在table.addView(tr)行之前。"废话"当然是一个onClick(查看v)函数。我最初只会得到最后一行的数据,无论我点击了哪一行。现在,我试着像上面的链接一样,在创建了所有表行之后,从更高级别的函数中生成onclicks。我可能可以提供更多信息,但我认为人们现在可以从中得到这个想法!谢谢你的帮助!
底线:我想通了!
基于我在问题中发布的链接,我意识到我需要制作一个文本视图对象来查看单元格的数据!所以这是我的代码,与上面的代码保持不变!
int rowNumCount = table.getChildCount();
for(int count = 1; count < rowNumCount; count++) {
View v = table.getChildAt(count);
if(v instanceof TableRow) {
final TableRow clickRow = (TableRow)v;
int rowCount = clickRow.getChildCount();
v.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Context context = getTabHost().getContext();
TableRow row = (TableRow)v;
TextView tv = (TextView)row.getChildAt(0);
CharSequence text = "Lot VALUE Selected: " + tv.getText();
int duration = Toast.LENGTH_SHORT;
Toast.makeText(context, text, duration).show();
}
});
}
}
就像我所说的,我只需要获取第一列的数据,从而获取行.getChildAt(0);线所以我知道可能还没有人有机会回答这个问题,但我希望我的回答能在未来帮助其他人!
"为什么不使用列表视图?"答:我认为就我所做的而言,表格格式看起来要好得多。
虽然我可能不会对我的代码设置进行巨大的更改,但我总是乐于听到有助于改进我的代码的更改!我爱这个社区!