Search code examples
androidlistenerprogress

Android app: how to turn off listener and turn it back on again?


say for example I have a progress bar and in onCreate activity I am setting up onProgressChanged listener.

sbt.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        int progressChanged = 0;
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // Toast.makeText(ProductDetailsInfoActivity.this,"seek bar progress:"+progressChanged, 
              //          Toast.LENGTH_SHORT).show();
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromuser) {
            //recalcpriceornot=false;


            // TODO Auto-generated method stub
            //Toast.makeText(ProductDetailsInfoActivity.this, String.valueOf(progress), Toast.LENGTH_SHORT).show();
            try {
                //if (recalcpriceornot) 
                {   GetItemPriceCalculation(progress);
                recalctotalprice();}

            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            progressChanged = progress;
            if(progress <= 100){

                setProgressBarColor(sbt,Color.GREEN);

             }else{
                 setProgressBarColor(sbt,Color.RED);

             }


        }
    });

My other controls (price box) adjust progress and progress bar adjusts price box therefor it will be going in a loop.

i can turn off listener by

sbt.setOnSeekBarChangeListener(null);

but to turn it back on do I have to re-write the whole part for listener. is There a better way of doing it?? thanks a lot


Solution

  • Yes. You can store the listener in an instance variable and then reuse it in multiple places in your code.

    For example, create an instance variable in your class like this:

    private SeekBar.OnSeekBarChangeListener mSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        int progressChanged = 0;
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // Toast.makeText(ProductDetailsInfoActivity.this,"seek bar progress:"+progressChanged, 
              //          Toast.LENGTH_SHORT).show();
            // TODO Auto-generated method stub
    
        }
    
        // other methods, etc
    });
    

    Then you can set the listener whenever you feel like it:

    // remove listener
    sbt.setOnSeekBarChangeListener(null);
    
    
    // reattach it later
    sbt.setOnSeekBarChangeListener(mSeekBarChangeListener);