2017-01-17 5 views
0

내부 클래스 외부에서 onProgressChanged 메서드의 진행 변수를 사용하고 싶습니다. 외부 클래스에 정의 된 메서드를 사용하려고 시도하고 내부 클래스에서 호출하여 해당 값을 가져 왔습니다. 그러나 매번 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

실수를 찾아 주셔서 감사드립니다. 효과가있다. –