Android onClickListener删除自己

时间:2012-10-23 15:23:50

标签: android button android-linearlayout

我有一个名为LabelButton的自定义LinearLayout类,它包含一个按钮和一个TextView。我想让按钮的onclick监听器删除LabelButton。如何将LabelButton对象中的某些内容传递给我的Activity类,告诉我的主要布局是否删除了LabelButton?

public class LabelButton extends LinearLayout {
  private OnClickListener onClick;
    public LabelButton(Context context, final String text) {
        super(context);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View labelView = inflater.inflate( R.layout.button_label, this );
        TextView textView = (TextView) labelView.findViewById( R.id.textLabelText);
        textView.setText( text );
        Button button = (Button) labelView.findViewById( R.id.buttonCancelLabel );

        onClick = new OnClickListener( ) {
          public void onClick( View v ) {
            System.out.println("Button: " + text + " clicked");
            // do something here to remove this button
          }
        };
        button.setOnClickListener( onClick );
    }
    @Override
    public void onFinishInflate() {
        super.onFinishInflate();

    }

}

在我的Activity类中,我将LabelButtons添加到这样的列表中......

//labelButtons is a List of LabelButtons

LabelButton labelButton = new LabelButton( getApplicationContext( ),
            txtBagLabel.getText( ).toString( ) );
        labelButtons.add( labelButton );

6 个答案:

答案 0 :(得分:1)

有两种方法。一,您可以在要删除的按钮上将可见性设置为GONE。

labelButton.setVisibility(View.GONE);

如果您是从按钮内部执行此操作(即它想隐藏本身),您可以尝试

LabelButton.this.setVisibility(View.GONE);

第二种方法是获取对父视图的引用并调用

parentView.remove(child);

其中child当然是对LabelButton对象的引用。

答案 1 :(得分:1)

将您的按钮对象设为最终,然后您可以从OnClickListener内部引用它,并可能更改其可见性或将其从视图中删除。

答案 2 :(得分:0)

((ViewGroup) LabelButton.this.getParent()).removeView(LabelButton.this);

答案 3 :(得分:0)

您可以将“this”别名为类变量,如下所示:

ViewGroup self = this;

然后您可以执行以下操作:

onClick = new OnClickListener( ) {
    public void onClick( View v ) {
        System.out.println("Button: " + text + " clicked");
        // do something here to remove this button
        ViewGroup parent = (ViewGroup) getParent();
        parent.removeView(self);
    }
};

答案 4 :(得分:0)

这样做:

 onClick = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           //remove this button
            ((LinearLayout)v.getParent()).removeView(v);              
        }
 };

然后设置监听器按钮

 button.setOnClickListener( onClick );

答案 5 :(得分:0)

在 KOTLIN 中同样的事情:

findViewById<View>(R.id.removeWidget)?.setOnClickListener {
        (parent as ViewGroup).removeView(this)
    }