Значение ProgressBar не изменяется

Я хочу использовать переменную хода выполнения метода onProgressChanged вне внутреннего класса. Я попытался использовать метод, определенный во внешнем классе и вызванный из внутреннего класса, чтобы получить это значение. Но каждый раз я получаю 0.
Нет обновленного значения переменной хода выполнения. Это в основном приложение для android, чтобы получить обновленное значение SeekBar.
Взгляните на код для лучшего понимания. В настоящее время я только получаю предыдущее/последнее значение прогресса. Не получая обновленное значение сразу, как я изменяю его.

Button gene;
ImageView image;
SeekBar ring_bar;
String collect;
private AudioManager am;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_prof);

    gene = (Button) findViewById(R.id.gene);
    image = (ImageView) findViewById(R.id.image);
    ring_bar = (SeekBar) findViewById(R.id.ring_bar);
    am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

    int maxV = am.getStreamMaxVolume(AudioManager.STREAM_RING);
    int curV = am.getStreamVolume(AudioManager.STREAM_RING);
    ring_bar.setMax(maxV);
    ring_bar.setProgress(curV);
    ring_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar arg0) {
        }

        @Override
        public void onStartTrackingTouch(SeekBar arg0) {
        }

        @Override
        public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
            am.setStreamVolume(AudioManager.STREAM_RING, progress, 0);
        }
    });

    int ring = ring_bar.getProgress();

    String ringgg = Integer.toString(ring);

    collect = ringgg;

    gene.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            try{
                BitMatrix bitMatrix = multiFormatWriter.encode(collect, BarcodeFormat.QR_CODE,200,200);
                BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
                Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
                image.setImageBitmap(bitmap);
            }
            catch (WriterException e){
                e.printStackTrace();
            }

        }
    });
}

}

1 ответ

  1. Ваша проблема заключается в том, что вы сохраняете прогресс в onCreate в вашей переменной, но никогда не обновляете значение после этого.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    //....
    
    int ring = ring_bar.getProgress();//Progress at the time of onCreate
    
    gene.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            try{
               //collect is still the same value since onCreate 
                BitMatrix bitMatrix = multiFormatWriter.encode(collect, BarcodeFormat.QR_CODE,200,200);
                //....
            }
            catch (WriterException e){
                e.printStackTrace();
            }
    
        }
    });
    

    Для создания QR для текущего значения необходимо вызвать getProgress()onClickListener. Это вернет вам текущее значение индикатора выполнения.

    gene.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            try{
                int ringtoneVolumeValue = ring_bar.getProgress();
                String ringtoneVolume = Integer.toString(ringtoneVolumeValue);
                BitMatrix bitMatrix = multiFormatWriter.encode(ringtoneVolume, BarcodeFormat.QR_CODE,200,200);
                //....
            }
            catch (WriterException e){
                e.printStackTrace();
            }
    
        }
    });