如何在android中动态更改按钮的列表器实例

时间:2016-10-12 13:32:35

标签: android android-button

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

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分配给同一个按钮,但是新分配的listner不能正常工作,仍然执行旧的setOnClickListener。

3 个答案:

答案 0 :(得分:0)

您可以在Click侦听器中编写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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为每个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);