有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

http://javatechig.com/安卓/安卓-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) 个答案

  1. # 1 楼答案

    好吧,我开始工作了,我觉得这很简单。不需要全局变量。事实上,不需要变量。我仍然搞不清楚我原来帖子中链接中的代码是如何将文本更新为当前seekbar值的。不管怎样,我只是重复了这一行(在这里我设置了文本值)textViewEmergency。setText(“紧迫性…public void on progressChanged(…除非我遗漏了什么,否则这不是更新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();
            }
        });
    
  2. # 2 楼答案

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

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