如何在 android 中动态更改按钮单击的侦听器实例

How to change listner instance of a button click dynamically in android

我正在尝试实现一种行为,即根据特定条件动态更改按钮单击侦听器操作。 到目前为止,我已经尝试了以下代码:

Button button = (Button) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
    int i =0;
    @Override
    public void onClick(View v) {
        if(i>0){
            button.setOnClickListener(null);
            buttonsetOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // do another function
                }
            });
         }
         i++;
    }
});

我在 setOnClickListener 上设置了 null,然后将新的 setOnClickListener 分配给同一个按钮,但是新分配的监听器不工作,它仍然执行旧的 setOnClickListener。

您可以在点击监听器中编写您的 if-else 逻辑,而不是设置新的监听器。

boolean imageUploaded = false;

button.setOnClickListener(new View.OnClickListener() {
    int i =0;
    @Override
    public void onClick(View v) {
        if(imageUploaded){
            //do some stuff.
        } else {
            //do other stuff
        }
        i++;
    });
}

而上传图片时,只需设置

imageUploaded = true;

每次点击按钮时,都会调用第一个onClickListener,并重新创建int i 变量。所以它仍然等于零。然后它不会切换到第二个 onClick 侦听器。可能你必须让你的 int i 变量成为全局变量。

为每个 onclicklistener 创建一个新的 onclicklistener 实例,例如:

final View.OnClickListener listener3 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //do stuff
        }
    };


    final View.OnClickListener listener2 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            btnNext.setOnClickListener(listener3);
            // do stuff
        }
    };


    View.OnClickListener listener1 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            btnNext.setOnClickListener(listener2);
            //do stuff
        }
    };



    btnNext.setOnClickListener(listener1);