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();
}
});
在我发现的几个示例中,包括下面的 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();
}
});