我已成功将TableRow
添加到TableLayout
,现在我想以编程方式删除TableRow
并将原始行添加到TableLayout
。这是我用来生成TableRow的代码:
public TableRow getTableRow(String text,String hint,boolean addCollapseOption)
{
TableRow tr=new TableRow(getBaseContext());
tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT));
TextView temp=new TextView(getBaseContext());
temp.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
temp.setText(text);
tr.addView(temp);
tempId="edit_"+count;
count++;
EditText edit_temp=new EditText(getBaseContext());
TableRow.LayoutParams edit_params=new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT,1f);
edit_params.setMargins(10, 0, 10, 0);
edit_temp.setLayoutParams(edit_params);
edit_temp.setHint(hint);
tr.addView(edit_temp);
if(addCollapseOption)
{
ImageButton btn_less=new ImageButton(getBaseContext());
btn_less.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));
btn_less.setImageDrawable(getResources().getDrawable(R.drawable.icon_less));
btn_less.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
shouldCollapse=true;
}
});
tr.addView(btn_less);
}
return tr;
}
当我尝试将此TableRow添加到TableLayout时,活动崩溃:
TableRow tr=getTableRow("First Name","Enter first name here",true);
我想您无法从布局中删除视图并且仍然能够使用其中的click事件(这会导致活动崩溃),layout
和shouldCollapse
是全局变量,如果设置为true :
if(shouldCollapse)
{
layout.removeAllViews();
layout.addView(originalRow);
}
编辑:将实施更改为使用removeChildAt
不起作用:
if(shouldCollapse)
{
int childCount=layout.getChildCount();
for(int i=1;i<childCount;i++)
layout.removeViewAt(i);
originalRow.setVisibility(TableRow.VISIBLE);
shouldCollapse=false;
}
现在,点击btn_less绝对没有。这是Logcat对问题的看法:
Less clicked
The value of shouldCollapse true
所以,这意味着即使shouldCollapse设置为true,但这个方法永远不会被调用......奇怪。
答案 0 :(得分:0)
您可以使用此代码删除以编程方式生成的TableRows:
public void onClick(View v)
{
final TableRow parent = (TableRow) v.getParent();
tr.removeView(parent);
}
或者如果你想在onClick上使用它,你必须将 View v 的值传递给它的任何功能。