2017-01-17 8 views
0

内部クラスの外でonProgressChangedメソッドのprogress変数を使用します。私は外部クラスで定義されたメソッドを使用しようとし、その値を取得するために内部クラスから呼び出されました。しかし毎回私は0になる。
進捗変数の更新された値がありません。基本的にSeekBarの更新された価値を得るためのアンドロイドアプリです。
理解を深めるためのコードを見てください。現在のところ、進捗状況の前/最終値のみを取得しています。私はそれを変更すると直ちに更新値を取得していません。ProgressBarの値は変更されません

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

「am.setStreamVolume」は機能しません。私はちょうどあなたのコードをコピーし、それは私のために正常に動作します。 – Altoyyr

+0

@Altoyyr私の懸念事項はこれではありません。変更された進捗値に対してQRを生成しているので、進捗の価値がほしいだけです。しかし、私は今変更された最新の進歩の価値を得ることはできません。私は前回変更した価値を得るだけです。 ring_bar.getProgress()は私にこの最後の進捗値を与えていますが、最新のものが必要です。私のポイントを得た? –

答えて

0

あなたの問題は、あなたの変数にのonCreateで進行状況を保存ができますが、その後の値を更新したことがないということ、です。あなたはonClickListenerでgetProgress()を呼び出す必要があり、現在の値のためにQRを作成するために

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

    } 
}); 

。これにより、進行状況バーの現在の値が返されます。

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

間違いを発見してくれてありがとう。それは働いている –

関連する問題