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