【问题标题】:How can I tell a dynamically created TextView's position in a table layout?如何判断动态创建的 TextView 在表格布局中的位置?
【发布时间】:2015-04-22 23:13:37
【问题描述】:

我有一个基于输入动态制作的文本视图的表格布局。我想设置它,以便当用户单击该文本视图/框时,它将根据该文本视图的行和列位置执行某些操作。因此,例如,如果单击的是行 (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);

        }

【问题讨论】:

标签: android textview tablelayout


【解决方案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);

【讨论】:

    【解决方案2】:

    您可以在表格的每个视图上使用 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);
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多