2016-10-12 5 views
0

Я пытаюсь реализовать поведение, в котором я изменяю действие нажатия кнопки мыши динамически на основе определенного условия. До сих пор я попытался ниже код:Как изменить экземпляр listner кнопки динамически в 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, а затем назначить новый setOnClickListener той же кнопке, но новый назначен у слушателя не работает и до сих пор его выполнение старого setOnClickListener.

ответ

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); 
0

Вместо того, чтобы устанавливать новый прослушиватель, вы можете написать логику 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; 
+0

есть два условие первые один, чтобы загрузить изображение и еще один, если изображение уже загружено затем просмотреть загруженное изображение. Если изображение уже присутствует на сервере, тогда мне тоже нужно это обработать. как справиться с этим? –

+0

С булевым флагом isUploaded? –

+0

@FerozSiddiqui обновил ответ. Надеюсь это поможет. – yrazlik

0

Everytime вы щелкаете на кнопке, первый onClickListener называется, а переменная я INT воссоздан. Таким образом, он остается равным нулю. Затем он не переключается на второй слушатель onClick. Вероятно, вы должны сделать свой int i переменной глобальным.

+0

спасибо за ответ. Мой вопрос: если я изменил список, независимо от значения i. Если назначен новый listner, почему его не получают, поскольку я сначала установил null, а затем назначил новый lisnter. –

+0

ОК, но, как я вижу в коде, смена слушателя происходит ТОЛЬКО, если i> 0, условие, которое никогда не произойдет. –

Смежные вопросы