我有这个代码来创建表格布局。在每一行中,都有一个OnclickListener事件。
for(int i=0;i<5;i++){
TextView title1 = new TextView(this);
title1.setText("Thành Phố:"+i);
TableRow.LayoutParams params = new TableRow.LayoutParams();
params.span = 5;
TableRow rowTitle = new TableRow(this);
rowTitle.setGravity(Gravity.CENTER_HORIZONTAL);
rowTitle.addView(title1, params);
TableRow tbr2 = new TableRow(this);
**tbr2.setOnClickListener(onclick);**
TextView tv2 = new TextView(this);
tv2.setText("type"+i);
TextView tv3 = new TextView(this);
tv3.setText("buy"+i);
tbr2.addView(tv3);
tbr2.addView(tv2);
table.addView(rowTitle);
table.addView(tbr2);
}
scr.addView(table);
layout.addView(scr);
setContentView(layout);
这是Onclicklistener
private OnClickListener onclick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("1234", "abcd");
}
};
这是我的问题:我必须做另外的工作。请告诉我如何检查表格行被点击。
答案 0 :(得分:0)
// Outside loop
int[] ids = {1 , 2 , 3 , 4 , 5}; // or int[] ids = {R.id.table_row_1 // etc };
// Inside loop
TableRow tbr2 = new TableRow(this);
tbr2.setId(ids[i]);
tbr2.setOnClickListener(onclick);
// On Click
@Override
public void onClick(View v) {
switch(v.getId()){
case 1: // or R.id.table_row_1
// tbr2
break;
}
}
SUP? : - )
答案 1 :(得分:0)
Blundell的解决方案完全可以接受。如果您不想这样做,另一种方法是为每一行使用不同的OnClickListener。
private OnClickListener[] clickListeners = new OnClickListener[] {
new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("0", "Row 0 click");
}
},
new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("1", "Row 1 click");
}
},
//Continue with more click listeners
};
设置侦听器的代码不是
tbr2.setOnClickListener(clickListeners[i]);
答案 2 :(得分:0)
我建议在每个表行使用setTag(),存储一些识别对象(例如其行号)。为每一行设置相同的onclick
。在onClick()
中使用v.getTag()
获取您的行号(或其他)。
E.g。 (另):
tbr2.setTag(i);
...然后
public void onClick(View v) {
Log.d("1234", String.format("row %d", v.getTag()));
}