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

Android Seekbar progress changed variable giving errors

在我发现的几个示例中,包括下面的 links,建议使用整数来跟踪进度变化,以便将其填充到 TextView 中——以便用户获取当前的搜索栏的编号。

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

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

但是,当我尝试将 progressChanged 变量设置为 final 时,我收到一条错误消息,如果我不将其设置为 final,我收到一条错误消息(请参阅下面代码中的注释)。我在 Stack Overflow 中查看了解释但找不到,因此不胜感激。类似地,在 link 中的示例(以及下面如果​​有效的话),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();
        }
    });

}

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

当您在 onCreate() 中声明变量并在另一个 class(在本例中为侦听器)中使用它时,编译器将强制您将变量声明为 final,以便变量所在的上下文被声明不能修改它的值。

好的,我让它开始工作了,而且我认为它非常简单。不需要全局变量。事实上,不需要变量。而且我仍然无法弄清楚我原来 post 中的链接中的代码应该如何将文本更新为当前的搜索栏值。无论如何,我只是重复了一行(我设置文本值的地方)textViewUrgent.setText("Urgency... in 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();
        }
    });