ProgressBar 值不变

ProgressBar value does not change

我想在内部 class 之外使用 onProgressChanged 方法的进度变量。我尝试使用在外部 class 中定义并从内部 class 调用的方法来获取该值。但每次我得到 0.
进度变量没有更新值。它基本上是一个 android 应用程序,用于获取 SeekBar 的更新值。
查看代码以便更好地理解。目前我只得到 previous/last 的进步价值。当我更改它时没有立即获得更新值。

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();
            }

        }
    });
}

}

您的问题是,您将 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,您必须在 onClickListener 中调用 getProgress()。这将为您 return 进度条的当前值。

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();
        }

    }
});