我有一个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}}
所做的事情答案 0 :(得分:1)
几种解决方案
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);
也许这并不重要,可能每一行都存储按钮对象的值(否则它甚至不会显示),但在其他情况下这给我带来了一些麻烦。在这种情况下,可以重用变量声明。