如何在Android中删除/删除动态生成的按钮?

时间:2013-01-27 14:42:52

标签: android button dynamically-generated

所以我生成了一些按钮。它取决于用户的数字(单击按钮时,创建一个新按钮)。

这就是我的成就:

   RelativeLayout layout = (RelativeLayout) findViewById(R.id.layoutcprompt);
    RelativeLayout.LayoutParams OBJ = new RelativeLayout.LayoutParams (140,80);
    if ((commandsi%6)==0) {adjust=adjust+86; commandsi=1;}
    OBJ.leftMargin =(140*(commandsi-1))+10;
    OBJ.topMargin =250+adjust;
    Button command = new Button(this);
    command.setLayoutParams(OBJ);
    command.setId(ID);
    command.setText(edittxt.getText().toString());
    edittxt.setText("");
    command.setBackgroundResource(R.drawable.costum_button);
    command.setTextColor(Color.WHITE);
    command.setTextSize(14);
    layout.addView(command);
    command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Button b = (Button)view;
            scommand=b.getText().toString();
        }
    });
    command.setVisibility(View.VISIBLE);

我想删除/删除它们,但我不知道如何....我给了他们一个唯一的ID,但我仍然不知道如何删除它们:/

6 个答案:

答案 0 :(得分:3)

我无法评论其他帖子,但使用

command = new Button(this)

可能涉及this上的隐式内存泄漏! (可以是Activity)。而是使用Context对象。或者至少删除按钮。

然后因为您拥有Button的父级。只需删除它:

ViewGroup layout = (ViewGroup) findViewById(R.id.layoutcprompt);
View command = layout.findViewById(ID);
layout.removeView(command);

答案 1 :(得分:2)

使命令成为全局变量。然后您可以稍后访问它,并致电command.setVisibility(View.GONE);

因此,在您的类文件的顶部,您将声明全局变量:

Button command;

然后在以后删除重新定义,而是分配给全局变量:

command = new Button(this);

然后,当您想隐藏它时,请致电:

command.setVisibility(View.GONE);

答案 2 :(得分:1)

尝试使用该文档,5秒的研究可以引导您进入RemoveView method

layout.removeView(command);

<强>更新

如果此行中有空指针异常,则表示您的layout为空,而不是command。使您的layout变量为该类的全局变量。

还要确保为每个创建的按钮保留不同的变量。如果您有一个全局变量,并使用相同的变量创建10个按钮,则只能引用最后创建的变量。如果您准确解释何时要删除该按钮,我们可以为您提供进一步的帮助。

例如,如果您想在用户点击按钮时删除按钮,则可以更改clickListener:

command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Button b = (Button)view;
            scommand=b.getText().toString();
            layout.removeView(view);    
    }
    });

答案 3 :(得分:1)

可以帮助查看此线程的其他人的另一个实现是您可以考虑删除父布局中的所有子元素。获得视图的父级(我假设它是一个布局容器)后,您可以删除所有子元素。

command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            ViewGroup vg = (ViewGroup)view.getParent();
            vg.removeAllViews();
    }
});

答案 4 :(得分:0)

出于安全目的,您也可以这样做:

ViewGroup layout = (ViewGroup) command.getParent();
if(null!=layout) //for safety only  as you are doing onClick
layout.removeView(command);

答案 5 :(得分:0)

您也可以使用此片段

添加按钮

        LinearLayout dynamicview = (LinearLayout)findViewById(R.id.buttonlayout);
        LinearLayout.LayoutParams  lprams = new LinearLayout.LayoutParams(  LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

            Button btn = new Button(this);
            btn.setId(count);
            final int id_ = btn.getId();
            btn.setText("Capture Image" + id_);
            btn.setTextColor(Color.WHITE);
            btn.setBackgroundColor(Color.rgb(70, 80, 90));
            dynamicview.addView(btn, lprams);
            btn = ((Button) findViewById(id_));
            btn.setOnClickListener(this);

删除按钮

            ViewGroup layout = (ViewGroup) findViewById(R.id.buttonlayout);
            View command = layout.findViewById(count);
            layout.removeView(command);