2014-01-19 3 views
2

Цвет фона: У меня есть одно действие, с текстом и кнопкой. Нажатие кнопки запускает SetValue(), которая открывает диалоговое окно, содержащее 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.

Проблема: После первоначальной установки значения, если я пытаюсь использовать метод еще раз, чтобы изменить текст, прогресс на SeekBar начинается с 0 каждый раз, когда он должен быть предварительно выбранным значением/ток текстовое значение.

Кроме того, я могу установить максимальное значение для панели, можно ли установить значение min? Т.е. -100? Как установить диапазон для панели поиска?

Спасибо за советы!

Update 1: Я инициализации переменной в начале класса, так что устранило int value = 0; линии, но проблема остается - SeekBar всегда открывается с прогрессом в исходный текст значения TextView.

+0

Как определить диапазон? Невозможно? – SQLiteNoob

+0

Что значит «индикатор выполнения всегда ** открывается ** с прогрессом в исходном текстовом значении TextView»? Вы имеете в виду, что вы повторно вводите какую-либо страницу, и значение строки поиска изменилось? –

+0

Когда я открываю диалог, поисковый барабан открывается правильно в первый раз - показывается прогресс в исходном значении текстового поля. Выбор значения с помощью кнопки поиска и его правильное изменение изменяет значение текстового поля. Однако при повторном открытии диалогового окна отображается строка поиска по значению текстового поля до его изменения. – SQLiteNoob

ответ

3

Прежде всего, вам нужно сохранять свою ценность, когда пользователь заканчивает поиск «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" в этом примере).

+0

Это хорошо работает, и это довольно простой способ сделать это.Я напишу несколько вопросов о том, чтобы превратить это в отдельный класс и получить его в базе данных, чтобы он появился после закрытия приложения и открытия его резервной копии. – SQLiteNoob

+0

Настройки, хранящиеся в 'SharedPreferences', будут сохраняться в экземплярах приложений. Они исчезнут, только если вы вызываете ['Editor.clear()'] (https://developer.android.com/reference/android/content/SharedPreferences.Editor.html) или если вы удалите приложение. –

+0

Действительно? Используя отображаемый код, когда я покидаю приложение и вернусь, данные сохраняются, но если я закрою его с помощью кнопки «Повторы», данные сбрасываются при перезапуске приложения. – SQLiteNoob

Смежные вопросы