1

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

我是这样做的:

   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,但我仍然不知道如何删除它们:/

4

6 回答 6

3

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

command = new Button(this)

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

然后因为你有你的Button. 只需将其删除:

ViewGroup layout = (ViewGroup) findViewById(R.id.layoutcprompt);
View command = layout.findViewById(ID);
layout.removeView(command);
于 2013-01-27T15:02:46.810 回答
2

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

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

Button command;

然后稍后删除重新定义并分配给全局变量:

command = new Button(this);

然后当你想隐藏它时,调用:

command.setVisibility(View.GONE);
于 2013-01-27T14:45:46.543 回答
1

尝试使用文档,5 秒的研究可以引导您使用RemoveView 方法

layout.removeView(command);

更新

如果您在此行有空指针异常,则表示您的layout为 null,而不是您的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);    
    }
    });
于 2013-01-27T14:45:55.627 回答
1

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

command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            ViewGroup vg = (ViewGroup)view.getParent();
            vg.removeAllViews();
    }
});
于 2014-10-26T09:23:07.627 回答
0

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

ViewGroup layout = (ViewGroup) command.getParent();
if(null!=layout) //for safety only  as you are doing onClick
layout.removeView(command);
于 2013-01-27T14:55:45.637 回答
0

你也可以使用这个sniper

添加按钮

        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);
于 2015-06-15T11:55:05.430 回答