如何判断动态创建的TextView在表格布局中的位置?

时间:2015-04-22 14:44:54

标签: android textview tablelayout

我有一个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);

        }

2 个答案:

答案 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);
}

}