我有一个textviews的表格布局,我根据输入动态制作。我想设置它,以便当用户点击该textview / box时,它将根据该textview的行和列位置执行某些操作。因此,例如,如果单击的是行(1,2),则在字符串extras中为1vs2创建第二个活动。
问题是我正在动态创建这些列和行,所以我不知道它有多宽,我不想将文本设置到它的位置,因为它应该在那里显示值。我唯一能想到的是将ID设置为特定的数字。例如,12表示第1行第2列。但是,这成为一个问题。如果我们做的超过十个。如(11,2)= 112,是第1行还是第11行呢?
最好的方法是什么?
以下是它们的创建方式:
//add cells
for (int k = 0; k < arrFencers.size() + 5; k++) {
//get table layout count
TextView tempCell = new TextView(this);
tempCell.setClickable(true);
tempCell.setText("_");
tempCell.setBackgroundResource(R.drawable.custombb);
// tempCell.setId("");
tempCell.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//This doesn't work~~
String data = (String) parent.getItemAtPosition(position);
String[] IDs = data.split("-");
//Get names
String[] names = {arrFencers.get(Integer.parseInt(IDs[0]) - 1),
arrFencers.get(Integer.parseInt(IDs[1]) - 1)};
//setup bout Sheet data
String[] boutData = {IDs[0], names[0], IDs[1], names[1]};
//create new bout sheet
Intent bIntent = new Intent("hss.quickpool.bout");
bIntent.putExtra("boutData", boutData);
startActivityForResult(bIntent, 1);
}
});
//add to table row
newFencer.addView(tempCell);
}
答案 0 :(得分:1)
每个View
对象都有setTag方法用于存储通用用户数据,因此它可以用于视图识别目的,如下所示:
class Position{
int mRow;
int mColumn;
public Position(int row, int column) {
this.mRow = row;
this.mColumn = column;
}
public int getRow() {
return mRow;
}
public int getColumn() {
return mColumn;
}
}
...
Position position = new Position(5, 10);
myTextView.setTag(position);
答案 1 :(得分:0)
您可以在表格的每个视图上使用setTag(Object o)。 并将信息存储在该对象中。
定义一个用于存储数据的简单类:
public static class MyData{
public final int rowI;
public final int columnI;
public MyData(int row, int column) {
rowI = row;
columnI = column;
}
}
在每个单元格上设置标记:
tempcell.setTag(new MyData(i, j));
并在onClick中检索数据:
@Override
public void onClick(View v) {
MyData mData = (MyData) v.getTag();
if (null != mData) {
v.setText(mData.rowI.toString + "," + mData.columnI.toString);
}
}