以编程方式删除TableRows

时间:2013-11-16 07:20:04

标签: android android-tablelayout

我已成功将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事件(这会导致活动崩溃),layoutshouldCollapse是全局变量,如果设置为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,但这个方法永远不会被调用......奇怪。

1 个答案:

答案 0 :(得分:0)

您可以使用此代码删除以编程方式生成的TableRows:

  public void onClick(View v)
  {
            final TableRow parent = (TableRow) v.getParent();
            tr.removeView(parent);
  }

或者如果你想在onClick上使用它,你必须将 View v 的值传递给它的任何功能。