如何在android中的动态表格布局中了解单元格位置

时间:2015-10-23 20:21:52

标签: android android-tablelayout

这里我使用动态表格布局,但我无法获得单元格位置。我的问题是在android中的动态表格布局中的“如何获得行和列位置”。请帮帮我。

感谢。

for (int i = 1; i <= rows; i++) {

        TableRow row = new TableRow(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        // inner for loop
        for (int j = 1; j <= cols; j++) {

             TextView tv = new TextView(this);
            tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                     LayoutParams.WRAP_CONTENT));
            tv.setBackgroundResource(R.drawable.cell_shape);
            tv.setPadding(5, 5, 5, 5);
            tv.setId(j);
            tv.setText("R " + i + ", C" + j);

            //mOrangeToolTipView = mToolTipFrameLayout.showToolTipForView(toolTip, tv);
            tv.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(final View v) {

                    Log.d("Row and Column position ", v.getTouchables()+"");

                }
            });

            row.addView(tv);

        }

        table_layout.addView(row);

    }

2 个答案:

答案 0 :(得分:0)

可能对你来说太迟了,但是......要从哪里获得行和列位置? 从内部for循环的内部,行位置是 i ,列位置是 j 。 外面尝试类似

的东西
((TextView)((TableRow)tableLayout.getChildAt(row)).getChildAt(column)).setText("MyText");

如果要为不同的单元格设置不同的OnClickListener,尝试从内部类(新的View.OnClickListener(){...}访问 i j ),我有坏消息,它不可能。但是你在循环中创建每个单元格,所以你可以像

那样创建它
...
if (i == 1 && j == 1){
                    tv.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            // do what cell (1,1) have to do
                        }
                    });
                } else {
                    tv.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            // do what other cells have to do
                        }
                    });
                }
...

我希望它会帮助你或其他人;)

答案 1 :(得分:0)

陷入同样的​​问题......找到了一个对我有用的解决方案,但是...... 并非适用于所有情况

更改了这一行:tv.setId(j); 收件人:tv.setId((i*100)+j);

它的工作原理:

获取行索引:row_index = id/100; 获取列索引:column_index = id%100; 注意:它的工作原理给i和j是2位数。(猜猜是在tablelayout中找到textview的索引,它将在99以内,最大值)