我如何知道动态创建的 TextView 在 table 布局中的位置?

How can I tell a dynamically created TextView's position in a table layout?

我有一个 table 文本视图布局,它是我根据输入动态制作的。我想设置它,以便当用户单击 textview/box 时,它会根据该文本视图的行和列位置执行某些操作。因此,例如,如果单击的是第 (1,2) 行,则在字符串 extra 中为 1vs2 创建第二个 activity。

问题是我正在动态创建这些列和行,所以我不知道它可以有多宽,而且我不想将文本设置到它的位置,因为那应该显示那里的价值观。我唯一能想到的就是将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);

        }

每个 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);

您可以在 table 的每个视图上使用 setTag(Object o)。 并将信息存储在该对象中。

定义一个简单的class用于存储数据:

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

}