后台:我有一个活动,包括Textview和一个按钮。单击该按钮会运行SetValue()
,这会打开一个包含Seekbar的对话框,而Seekbar又会设置textview的值。这是代码:
public void SetValue(View view){
ShowDialog();
}
public void ShowDialog() {
final AlertDialog.Builder popDialog = new AlertDialog.Builder(this);
final SeekBar seek = new SeekBar(this);
int value = 0;
try {
value = Integer.parseInt(tv.getText().toString());
} catch(NumberFormatException nfe) {
System.out.println("Could not parse " + nfe);
}
seek.setProgress(value);
seek.setMax(100);
popDialog.setView(seek);
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
//Update textview value
tv.setText("Value : " + progress);
}
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
// Button
popDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
popDialog.create();
popDialog.show();
}
所以它工作正常,显示初始textview进度,并让我用seekbar更新它。
问题: 在初始设置值之后,如果我再次尝试使用该方法来更改文本,则搜索栏上的进度每次都从0开始,此时它应该是先前选择的值/当前textview值。
另外,我可以设置条的最大值,我可以设置最小值吗?即-100?如何设置搜索栏的范围?
感谢您的所有建议!
更新1:我在类的开头初始化了变量,因此消除了int value = 0;
行,但问题仍然存在 - 搜索栏始终以原始进度打开textview的文本值。
答案 0 :(得分:4)
首先,当用户完成“寻找”时,您需要坚持自己的价值。 SeekBar
。我们在onStopTrackingTouch
中执行此操作:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
//Update textview value
tv.setText("Value : " + progress);
}
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onStopTrackingTouch(SeekBar seekBar) {
// Update your preferences only when the user has finished moving the seek bar
SharedPreferences prefs = getContext().getSharedPreferences("mySharedPrefsFilename", Context.MODE_PRIVATE);
// Don't forget to call commit() when changing preferences.
prefs.edit().putInt("seekBarValue", seekBar.getProgress()).commit();
}
现在,您希望在创建对话框时显示此持久值 - 因此您需要检索它。你可以这样做:
int value = 0;
SharedPreferences prefs = getContext().getSharedPreferences("mySharedPrefsFilename", Context.MODE_PRIVATE);
value = prefs.getInt("seekBarValue", 0); // 0 is default
seek.setProgress(value);
// You also need to update your TextView to show the saved value
tv.setText("Value : " + value);
您可以将对SharedPreferences
的访问权限包装在一个类中;这是确保您使用相同的首选项文件名(在此示例中为"mySharedPrefsFilename"
)和相同的首选项键来存储/检索值(此示例中为"seekbarValue"
)的一种方法。 / p>