Как установить Text в общее количество всех значений прогресса SeekBar?

Я хочу, чтобы «result.setText» показывал изменяющуюся сумму совокупного прогресса всех SeekBars. Я также пытаюсь сохранить это изменение int в собственной переменной (равной общему количеству всего прогресса SeekBar).

У меня есть 9 SeekBars, все они имеют максимум 3. Когда я изменяю любой из них, я хочу, чтобы totalScoreInt равнялся +1. Если бы я перемещал каждую SeekBar вверх по одной с 0, по одной за раз, я бы хотел, чтобы TotalScoreInt увеличивался на 1, с 0 до 27, а TotalScoreInt уменьшался бы на 1 с 27 до 0, если бы я делал противоположное для каждого на их макс.

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

    seekBar1value = progress;
    seekBar2value = progress;
    seekBar3value = progress;
    seekBar4value = progress;
    seekBar5value = progress;
    seekBar6value = progress;
    seekBar7value = progress;
    seekBar8value = progress;
    seekBar9value = progress;

    totalScoreInt =
            (seekBar1value
                    + seekBar2value
                    + seekBar3value
                    + seekBar4value
                    + seekBar5value
                    + seekBar6value
                    + seekBar7value
                    + seekBar8value
                    + seekBar9value);

    switch (seekBar.getId()){
        case R.id.seekBar1:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar2:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar3:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar4:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar5:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar6:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar7:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar8:
            result.setText("Score: " +progress);
            break;

        case R.id.seekBar9:
            result.setText("Score: " +progress);
            break;
    }

    //result.setText(String.valueOf("Score: " +totalScoreInt));
}

Этот код устанавливает текст в соответствии с последним измененным значением прогресса SeekBar.

Я хочу, чтобы это число росло или уменьшалось каждый раз при изменении любого из результатов SeekBars.

Итак, если seekBar1 progress = 3 и seekBar2 progress = 2, totalScoreInt будет равен 5, и это будет установлено в «результате».


person gian848396    schedule 04.08.2016    source источник
comment
Непонятно, в чем вопрос. Пожалуйста, предоставьте больше информации   -  person 7geeky    schedule 04.08.2016


Ответы (1)


Вы должны хранить глобальную ссылку для каждого SeekBar вместе с вашей переменной-счетчиком. Затем создайте метод примерно так:

private int progress;

private SeekBar sb1, sb2, sb3; // And the others...

private synchronized void handleSeekBars() {
    progress = sb1.getProgress() + sb2.getProgress() + sb3.getProgress();
}

А затем вызовите его внутри каждого SeekBar#OnSeekBarChangeListener(), например:

sb1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        handleSeekBars();
        result.setText("Score: " + progress);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) { }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) { }
});

Это должно делать свое дело.

person Mauker    schedule 04.08.2016