1

ボタンと TextView を含む LabelButton という名前のカスタム LinearLayout クラスがあります。ボタンの 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

2つの方法があります。1 つ目は、削除したいボタンの可視性を GONE に設定できることです。

labelButton.setVisibility(View.GONE);

ボタンの内側からこれを行っている場合(つまり、それ自体を非表示にしたい場合)、試してみてください

LabelButton.this.setVisibility(View.GONE);

2 番目の方法は、親ビューへの参照を取得して呼び出すことです。

parentView.remove(child);

child はもちろん、LabelButton オブジェクトへの参照です。

于 2012-10-23T15:29:10.230 に答える
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

次のように、「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

KOTLIN でも同じこと:

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

ボタンオブジェクトを最終的にすると、内部から参照してOnClickListener、可視性を変更したり、ビューから削除したりできます。

于 2012-10-23T15:29:10.790 に答える