首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Seekbar进度更新

Seekbar进度更新
EN

Stack Overflow用户
提问于 2014-01-19 20:54:33
回答 1查看 11.1K关注 0票数 2

背景:我有一个活动,有一个Textview和一个按钮。单击该按钮将运行SetValue(),它将打开一个包含Seekbar的对话框,该对话框将设置textview的值。下面是代码:

代码语言:javascript
复制
    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();
    }

因此,它运行良好,显示初始的文本视图进度,并让我用查找栏更新它。

问题:最初设置值后的,如果我再次尝试使用该方法更改文本,则查找栏上的进度每次从0开始,此时它应该位于先前选择的值/当前文本视图值。

另外,我可以为这个条形图设置一个最大值,我可以设置一个min值吗?伊-100?我该如何为搜索栏设定一个范围?

谢谢你的建议!

更新1: I在类的开头初始化了变量,从而消除了int value = 0;行,但是问题仍然存在--查找栏总是在文本视图的原始文本值处打开进度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-19 22:04:46

首先,当用户完成“寻找”SeekBar时,您需要持久化您的值。我们在onStopTrackingTouch中这样做

代码语言:javascript
复制
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();
}

现在,您希望在创建对话框时显示这个持久化值,因此您需要检索它。你可以这样做:

代码语言:javascript
复制
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")的一种方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21222535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档