Обновление просмотра текста на основе ввода пользователя - PullRequest
0 голосов
/ 15 августа 2011

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

Я не могу понять, как получить эти числа (мне нужно выполнить базовые математические операции, такие как сложение, умножение и т. Д.) В новое текстовое представление, которое обновляется одновременно.

Я постараюсь опубликоватьнекоторый код, но я супер новый для java, android и даже для этого сайта, так что не удивляйтесь, когда ничего из этого не имеет смысла.: -P

Важный код - это то, что я думаю (* я думаю).

    SeekBar sbc = (SeekBar) findViewById(R.id.seekBar4);
    final TextView tvc = (TextView) findViewById(R.id.textView10);
    sbc.setMax(200);
    sbc.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            tvc.setText(String.valueOf(progress-100));
        }

    });

    //set up chance bar and text

    TextView tvp = (TextView) findViewById(R.id.textView14);
    tvp.setText(tvc.getText().toString());

Как вы можете видеть, моя панель поиска изменяется от -100 до 100 ... очень горжусьтот (который потребовался мне навсегда для google / research lol)

Также tvp.setText (tvc.getText (). toString ());только вытаскивает начальное значение tvc

Заранее спасибо, а пока буду с ним играть.

1 Ответ

1 голос
/ 15 августа 2011

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

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    tvc.setText(String.valueOf(progress-100));
    TextView tvp = (TextView) findViewById(R.id.textView14);
    tvp.setText(tvc.getText().toString());
}

Или более аккуратно:

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    String progress = String.valueOf(progress-100)
    tvc.setText(progress);
    tvp.setText(progress); // move the findViewById outside this method, and put it with tvc
}

В качестве альтернативы, если у вас возникают трудности с изменением текста в tvc, это может быть потому, что вы объявили его как final.Если это так, попробуйте сделать tvc неконечной переменной-членом вашего класса, то есть поместить ее вне любого метода, в начале вашего класса, например так:

public class MyClass extends Activity {

    private TextView tvc;
    ...

РЕДАКТИРОВАТЬ:

Спасибо за дополнительную информацию!Попробуйте что-то вроде этого:

public class MyClass extends Activity {

    private TextView tvc;
    private TextView tvd;
    private TextView tvp;

    ... // somewhere here you need to get the TextViews from the Layout
    ... // missing out lots of code here and skipping straight to onProgressChanged for first seekBar

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        String progress1 = String.valueOf(progress-100)
        tvc.setText(progress1);
        String progress2 = tvd.getText().toString;
        String result = resultOfSomeCalculationUsingTheInputs();
        tvp.setText(result);
    }
}

В вашем другом SeekBar вы бы сделали что-то подобное (установите текст tvd, получите текст tvc, выполните вычисления, установите результат как текст tvp)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...