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

Я хочу использовать переменную прогресса метода onProgressChanged вне внутреннего класса. Я попытался использовать метод, определенный во внешнем классе и вызванный из внутреннего класса, чтобы получить это значение. Но каждый раз получаю 0.
Не обновляется значение переменной progress. По сути, это приложение для 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();
            }

        }
    });
}

}


person K.Malu    schedule 17.01.2017    source источник
comment
Так что вы говорите, что am.setStreamVolume не работает? Я просто скопировал ваш код, и он отлично работает для меня.   -  person JDurstberger    schedule 17.01.2017
comment
@Altoyyr Меня беспокоит не это. Мне просто нужно значение прогресса, поскольку я генерирую QR для измененного значения прогресса. Но я не получаю последнее значение прогресса, которое я изменил сейчас. Я получаю только значение, которое я изменил в прошлый раз. ring_bar.getProgress() дает мне это последнее значение прогресса, но мне нужно самое последнее. Понял?   -  person K.Malu    schedule 17.01.2017


Ответы (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();
        }

    }
});
person JDurstberger    schedule 17.01.2017
comment
Большое спасибо, что нашли ошибку. Это работает - person K.Malu; 17.01.2017