在Android的OnLongClick中找到由ID添加到TableRow的按钮?

时间:2011-06-05 11:53:48

标签: android tablerow

我有一个TableLayout,动态添加TableRows,具体取决于游标的大小。 我在每行添加一个删除按钮,该按钮设置为Invisible。每个行和按钮在创建时获取的id如果属于同一行则相同。 当用户在TableRow上LongClicks时,可见性设置为Visible,然后出现删除按钮。

OnLongClick监听器中,我检查按钮Id是否与单击的视图(Here TableRow)相同。

        rel.addView(btnDelete);
            tr.addView(rel);


        tr.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    int tableRowId = view.getId();
                 if(tableRowId == btnDelete.getId()){
                    btnDelete.setVisibility(View.INVISIBLE);
                    }
                    return true;
                }
            });

但对底部最低按钮上的按钮似乎也是如此。因此,似乎btnId被存储为最后添加的btnId,因为唯一的TableRow是最后一个.setText(btnId + tableRowId)。但是当我使用btnDelete = new Button(this); btnDelete.setId(revolutionCounter); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); params.addRule(RelativeLayout.CENTER_VERTICAL); btnDelete.setLayoutParams(params); rel.addView(btnDelete);//a relativelayout inside the tablerow tr.addView(rel); 时,我可以看到他们一直有同样的ID。

我也尝试使用Tag,但我偶然发现了同样的问题。

非常感谢!

编辑:

new Button(this);

然后我将tr(tablerow)添加到tablelayout。所以我想我正在重复使用按钮?我应该如何创造新的?我认为这就是我对{{1}}

所做的事情

1 个答案:

答案 0 :(得分:1)

几种解决方案

  • 不是在表格行上捕获longclick,而是通过
  • 直接在删除按钮上捕获它

btndelete.setDuplicateParentStateEnabled(true)

Button.setDuplicateParentStateEnabled(boolean)

在btnDelete上添加LongClickListener并将可见性设置为Visible / invisible,切换它或您想要做的任何事情。如果需要访问longclickListener中的表行,请调用

TableRow tableRow = (TableRow) view.getParent();

  • 如果要将longclicklistener保留在TableRow上,可以通过以下方式访问其btnDelete子项:

    Button btnDelete = view.findViewById(view.getId());

PS。不确定这是否有问题,但您仍在销毁以前的删除按钮。而不是

btnDelete = new Button(this);

你需要重新声明它

Button btnDelete = new Button(this);

也许这并不重要,可能每一行都存储按钮对象的值(否则它甚至不会显示),但在其他情况下这给我带来了一些麻烦。在这种情况下,可以重用变量声明。