【问题标题】:How to remove dynamically created views on button click如何在按钮单击时删除动态创建的视图
【发布时间】:2014-02-22 07:08:10
【问题描述】:
   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 个文本字段和一个按钮。我该怎么做?

【问题讨论】:

  • 试试 ll.removeView(view)
  • 你以编程方式创建 ll 布局
  • 你不是每次都创建ll.. 对吧?
  • 你检查我的答案了吗?你的问题解决了吗?

标签: android


【解决方案1】:

试试下面的代码。

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”中删除。

【讨论】:

    【解决方案2】:

    我认为您必须在 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】:

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

        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 
      
              }
          });
      
      }
      

      【讨论】:

      • 实际上我不想删除所有项目。需要删除与按钮关联的文本字段。
      • @kaluwila Dude 我只是想知道黑白 View.GONE 和 View.INVISIBLE 有什么区别。你能告诉我吗?
      • @SMR : 检查stackoverflow.com/questions/11556607/… 你就会明白有什么区别
      • 在你的回答中,如果我创建超过 1 行并尝试随机删除该方法不起作用。例如,我创建 5 行,我需要在动态创建 3 时删除第 3 行rd 按钮被点击
      • @user2771059 我已经编辑了答案希望这能解决你的问题。
      【解决方案4】:

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

      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 的好处是您可以根据需要取回视图,但layout.removeView(qty) 将永久删除视图,您必须重新添加视图。

      [编辑] 1. 更改为View.GONE 而不是View.INVISIBLE,原因已解释here


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

      【讨论】:

      • 实际上我不想删除所有项目。需要删除与按钮关联的文本字段。
      【解决方案5】:

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

      Linearlayout.removeViewAt();
      

      如果您想再次查看该视图,则可以以相同的方式调用 addViewAt()。

      希望对你有帮助。

      【讨论】:

        【解决方案6】:

        添加这一行

        mLayout.removeViewAt(mLayout.getChildCount()-1);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多