可以setEnabled()函数可以覆盖,如果是这样如何?

时间:2017-11-29 07:08:20

标签: java android onclicklistener

public class AppaSwitch extends AppCompatImageButton implements View.OnClickListener {

 @Override
    public void onClick(View v) {

    }

}

与上述code一样,有一种方法可以覆盖setEnabled()中的android功能。以下是一个示例,但我看不到像这样的方法

public class AppaSwitch extends AppCompatImageButton implements View.OnEnabled {

     @Override
        public void OnEnabled(View v) {

        }

    }

或者有没有其他方法可以做到这一点?

4 个答案:

答案 0 :(得分:2)

setEnabled()是View类的方法,而AppCompatImageButton已经扩展了View Class,所以你可以直接覆盖这里所做的:

public class AppaSwitch extends AppCompatImageButton {
    @Override
    public void setEnabled(boolean enabled) {
        //your piece of code

        //if you want to remove below line to remove the function of super class.
        super.setEnabled(enabled);
    }
}

答案 1 :(得分:1)

您需要扩展View类才能覆盖setEnabled,然后定义自己的接口以实现此类onEnabled回调方法。

但是,我认为您应该使用Switch或其他CompoundButton来确定onCheckChanged

或者您可以使用常规点击监听器和一些EventBus库来通知视图启用

答案 2 :(得分:1)

创建如下所示的自定义开关

 public class AppCustomSwitch extends AppCompatImageButton {
    private OnEnabledListener listener;

    public AppCustomSwitch(Context context) {
        super(context);
    }

    public AppCustomSwitch(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AppCustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        if(enabled){
            listener.OnEnabled(this);
        }
    }

    public void setOnEnabledListener(OnEnabledListener listener) {
        this.listener = listener;
    }

    public interface OnEnabledListener{
        public void OnEnabled(View v);
    }
}

并使您的活动/片段实施AppCustomSwitch.OnEnabledListener

    public class TestActivity extends AppCompatActivity implements AppCustomSwitch.OnEnabledListener{

    private AppCustomSwitch customSwitch;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        customSwitch = findViewById(R.id.custom_switch);
        customSwitch.setOnEnabledListener(this);
    }

    @Override
    public void OnEnabled(View v) {
        // your stuff here
    }
}

答案 3 :(得分:-1)

你不能seEnabled();方法,因为它是一个setter方法,而不是interface方法