Android Seekbar进度更改变量给出错误

时间:2015-01-06 05:08:01

标签: java seekbar

在我发现的几个例子中,包括下面的链接,建议使用一个整数来跟踪进度变化,以便将其填充到TextView中 - 然后用户获得当前的数字搜索条。

http://examples.javacodegeeks.com/android/core/widget/seekbar/android-seekbar-example/

http://javatechig.com/android/android-seekbar-example

但是,当我尝试将progressChanged变量设置为final时,我收到一条错误消息,如果我没有将其设置为final,则会收到错误消息(请参阅下面的代码中的注释备注)。我查看了Stack Overflow的解释,但找不到,所以任何帮助都表示赞赏。在类似的说明中,在链接中的示例中(以及下面是否有效),Android如何知道变量progressChanged应该应用于textView?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializeVariables();


    textViewUrgent.setText("Urgency: " + seekBarUrgent.getProgress()+" of " + seekBarUrgent.getMax());

    //if I change this to final int progressChanged I get an error message...
    //...below that the variable 'Cannot assign a value to final variable progressChanged'
    final int progressChanged = 0;

    seekBarUrgent.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

        //If I don't set progressChanged variable to final, I get an error message telling me to do so
        progressChanged = progress;
            Toast.makeText(getApplicationContext(), "Changing seekbar's progress", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            Toast.makeText(getApplicationContext(), "Started tracking seekbar", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            Toast.makeText(getApplicationContext(), "Stopped tracking seekbar", Toast.LENGTH_SHORT).show();
        }
    });

}

2 个答案:

答案 0 :(得分:0)

将progressChanged变量声明为全局变量。您不会被迫将其声明为全球。

当您在onCreate()中声明变量并在另一个类(在本例中为侦听器)中使用它时,编译器将强制您将变量声明为final,这样,声明变量的上下文无法修改价值。

答案 1 :(得分:0)

好的,所以我开始工作了,我觉得它很直接。无需全局变量。实际上,不需要变量。而且我仍然无法弄清楚原始帖子中链接中的代码应该如何将文本更新为当前的搜索栏值。无论如何,我只是重复了这一行(我设置了文本值) textViewUrgent.setText(" Urgency ... public void onProgressChanged(... 除非我错过了一些东西,这不是更新textView以匹配搜索栏当前进度的明显方法吗?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializeVariables();

    // Initialize the textview with '0'.
    textViewUrgent.setText("Urgency: " + seekBarUrgent.getProgress() + " of " + seekBarUrgent.getMax());

    seekBarUrgent.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            textViewUrgent.setText("Urgency: " + seekBarUrgent.getProgress() + " of " + seekBarUrgent.getMax());
            Toast.makeText(getApplicationContext(), "Changing seekbar's progress", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            Toast.makeText(getApplicationContext(), "Started tracking seekbar", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            Toast.makeText(getApplicationContext(), "Stopped tracking seekbar", Toast.LENGTH_SHORT).show();
        }
    });