Java Android Seekbar progress已更改变量,给出错误

Java Android Seekbar progress已更改变量,给出错误,java,seekbar,Java,Seekbar,在我找到的几个例子中,包括下面的链接,建议使用整数来跟踪进度变化,以便将其填充到文本视图中,这样用户就可以得到seekbar的当前编号 但是,当我尝试将progressChanged变量设置为final时,会收到一条错误消息,如果我没有将其设置为final,则会收到一条错误消息,请参见下面代码中的注释。我在Stack Overflow中查找解释,但找不到解释,因此非常感谢您的帮助。类似地,在链接和下面的示例中,如果它起作用,Android如何知道变量progressChanged应该应用于tex

在我找到的几个例子中,包括下面的链接,建议使用整数来跟踪进度变化,以便将其填充到文本视图中,这样用户就可以得到seekbar的当前编号

但是,当我尝试将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();
        }
    });

}

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


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

好的,我让它工作了,我认为这很简单。不需要全局变量。事实上,不需要变量。我仍然无法理解我的原始帖子中链接中的代码是如何将文本更新为当前seekbar值的。无论如何,我只是重复了我设置文本值TextViewEmergency.setTextUrgency的那一行。。。在公共场合,你的行为改变了。。。除非我遗漏了什么,否则这不是更新textView以匹配seekbar当前进度的明显方法吗

@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();
        }
    });

在Java编程语言中,final关键字在几个不同的上下文中用于定义一个以后不能更改的实体。你听说过类似的事情吗?是的,我听说过,并且做过一些研究。我还不能说我已经把我的大脑完全用在它上面了,但是无论如何,你知道为什么我看到的例子不使用final吗?但是如果我不使用final,我会出错,如果我使用final,那么就把int progressChanged声明为全局变量。您不会被迫将其声明为最终版本。请参阅下面我的解决方案。。。