2017-01-17 1 views
0

Je souhaite utiliser la variable de progression de la méthode onProgressChanged en dehors de la classe interne. J'ai essayé d'utiliser une méthode définie dans la classe externe et appelée depuis la classe interne pour obtenir cette valeur. Mais chaque fois que je reçois 0.
Aucune valeur mise à jour de la variable de progression. Il s'agit essentiellement d'une application Android pour obtenir la valeur mise à jour de SeekBar.
Jetez un oeil sur le code pour une meilleure compréhension. Actuellement, je n'ai que la précédente/dernière valeur de progrès. Ne pas obtenir la valeur mise à jour immédiatement comme je le change.La valeur de ProgressBar ne change pas

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

     } 
    }); 
} 

}

+0

Donc, ce que vous dites est que 'am.setStreamVolume' ne fonctionne pas? Je viens de copier votre code et ça marche bien pour moi. – Altoyyr

+0

@Altoyyr Mon souci n'est pas avec celui-ci. Je veux juste la valeur du progrès car je génère QR pour la valeur de progrès changé. Mais je n'obtiens pas la dernière valeur de progrès que j'ai changé maintenant. Je n'ai que la valeur que j'ai changé la dernière fois. ring_bar.getProgress() me donne cette dernière valeur de progression mais j'ai besoin de la dernière. J'ai mon point? –

Répondre

0

Votre problème est que vous enregistrez les progrès dans onCreate à votre variable mais vous ne mettez à jour la valeur après.

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

    } 
}); 

Afin de créer un QR pour la valeur actuelle, vous devez appeler getProgress() dans le onClickListener. Cela vous renverra la valeur actuelle de la barre de progression.

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

    } 
}); 
+0

Merci beaucoup d'avoir découvert l'erreur. Ça fonctionne –