1

我有一个名为 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 );
4

6 回答 6

3

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

于 2012-10-23T15:43:56.983 回答
1

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

labelButton.setVisibility(View.GONE);

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

LabelButton.this.setVisibility(View.GONE);

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

parentView.remove(child);

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

于 2012-10-23T15:29:10.230 回答
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);
    }
};
于 2013-05-03T22:54:14.087 回答
0

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

于 2012-10-23T15:29:10.790 回答
0

这样做:

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

然后设置按钮那个监听器

 button.setOnClickListener( onClick );
于 2015-07-07T18:12:00.887 回答
0

在 KOTLIN 中也是一样的:

findViewById<View>(R.id.removeWidget)?.setOnClickListener {
        (parent as ViewGroup).removeView(this)
    }
于 2021-02-07T21:32:03.480 回答