如何在按钮单击时删除动态创建的视图

时间:2014-01-30 05:40:55

标签: android

   public void Add_text() {


        ll.setOrientation(LinearLayout.HORIZONTAL);
        ll.setId(i);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        TextView product = new TextView(getActivity());
        product.setText(" Product" + 5 + "    ");
        ll.addView(product);

        EditText qty = new EditText(getActivity());
        qty.setText(i + "");
        qty.setId(i);
        qty.setWidth(120);

        ll.addView(qty);

        Button btn = new Button(getActivity());
        ll.addView(btn);
        btn.setLayoutParams(params);
        btn.setOnClickListener(o);

        ly.addView(ll);
        i++;

    }

我编写了上面的代码来动态创建文本域和按钮;但是现在我需要在单击按钮时删除2个文本字段和一个按钮。我该怎么做?

6 个答案:

答案 0 :(得分:4)

请尝试以下代码。

button.setOnClickListener(new View.OnClickListener() {      
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        LinearLayout linearParent =  (LinearLayout) v.getParent().getParent();
        LinearLayout linearChild = (LinearLayout) v.getParent();
        linearParent.removeView(linearChild);   
    }
});

<强>解释

  • 这里首先采取任何观点的“GrandParent”。
  • 然后选择“父”视图
  • 参考“GrandParent”删除“父”视图。
  • 这将删除“父”所持有的所有视图。根据你的代码,你的“ll”将是“linearChild”。而“ly”将是“linearParent”。所以整个“ll”将从你动态添加的“ly”中删除。

答案 1 :(得分:0)

如果您想永久删除您创建的视图。

  OnClick(View view){
     ly.removeAllViews()
  }

如果您不想永久删除自己创建的视图。

 OnClick(View view){
     ly.setVisibility(View.GONE); //This will hide the all views
     qty.setVisibility(View.GONE);//This will hide the EditText qty 
     product .setVisibility(View.GONE);//This will hide the TextView product 
 }

请使用您想要的相应代码行。

修改

根据您的具体情况使用此代码:

public void Add_text() {


    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setId(i);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    TextView product = new TextView(getActivity());
    product.setText(" Product" + 5 + "    ");
    ll.addView(product);

    EditText qty = new EditText(getActivity());
    qty.setText(i + "");
    qty.setId(i);
    qty.setWidth(120);

    ll.addView(qty);

    Button btn = new Button(this);
    ll.addView(btn);
    btn.setLayoutParams(params);


    ly.addView(ll);
    i++;

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View button) {
            qty.setVisibility(View.GONE);//This will hide the EditText qty 
             product .setVisibility(View.GONE);//This will hide the TextView product 

        }
    });

}

答案 2 :(得分:0)

我认为你必须在LinearLayout上使用这个方法:

public void removeView (View view)

先打电话给你:

EditText et = (EditText)linearLayout.findViewById(yourEditText.getId()); 

然后调用remove view方法:

linearLayout.removeView (et) ; 

并删除LinearLayout中的所有视图,执行以下操作:

public void removeAllViews ()

如下:

linearLayout.removeAllViews()

并给我一些反馈

希望有助于。

答案 3 :(得分:0)

您只需在所选按钮的qty.setVisibility(View.GONE)上使用onClickListener()即可。像这样。

btn.setOnClickListener(new OnClickListener() {  
    @Override
    public void onClick(View v) {
        qty.setVisibility(View.GONE); //for temporary purpose

        //or u can also do this
        layout.removeView(qty); //removes permanently
    }
});

使用View.GONE的好处是,如果需要,可以返回View,但layout.removeView(qty)将永久删除视图,您必须重新添加视图。

[编辑] 1.由于解释原因here

,更改为View.GONE而不是View.INVISIBLE

希望我回答你的问题。 :)

答案 4 :(得分:0)

只使用要从线性布局中删除视图的索引

Linearlayout.removeViewAt();

如果你想再次查看那个视图,那么你可以用同样的方式调用addViewAt()。

我希望它会对你有所帮助。

答案 5 :(得分:0)

添加此行

{{1}}