Как установить значение счетчика на основе значения в настройках

1

Я заполняю счетчик из jsonarray, и мне нужно настроить счетчик на значение, сохраненное в настройках. Я хочу установить прямую строку "id" равным "idlocatie", сохраненной в настройках.

  SharedPreferences mySharedPreferences =PreferenceManager.getDefaultSharedPreferences(this);     
    final String locatie= mySharedPreferences.getString("idlocatie", "");
 JSONObject jsonLocatii = JSONfunctions.getJSONfromURL("http://www.mySite");
      try{      
    JSONArray  earthquakes = jsonLocatii.getJSONArray("earthquakes");

        for(int i=0;i<earthquakes.length();i++){                        
            JSONObject e = earthquakes.getJSONObject(i);                
            String id = e.getString(TAG_IDLOCATIE);
            String name = e.getString(TAG_LOCATIE);             
            locatiiList.add(new Locatii(id, name.toUpperCase()));        
            locatii = (Spinner) findViewById(R.id.spinLocatie);
            LocatiiAdapter cAdapter = new LocatiiAdapter(this, android.R.layout.simple_spinner_item, locatiiList);
            locatii.setAdapter(cAdapter);                 
        }   

 }catch(JSONException e)        {
     Log.e("log_tag", "Error parsing data "+e.toString());
 }
Теги:
spinner

1 ответ

2
Лучший ответ

Если я правильно понимаю, вы пытаетесь установить выбранное значение? попробуйте locatii.setSelection(cAdapter.getPosition(locatie));

Или вы пытаетесь изменить фактическое значение, связанное с выбором?

EDIT. Здесь попробуйте это. Вам понадобится проверка здравомыслия, но, надеюсь, в правильном направлении. Другой вариант - переопределить getPosition(), а другой - найти индекс из locatiiList и использовать его.

SharedPreferences mySharedPreferences =PreferenceManager.getDefaultSharedPreferences(this);     
final String locatie= mySharedPreferences.getString("idlocatie", "");
JSONObject jsonLocatii = JSONfunctions.getJSONfromURL("http://www.mySite");
try {      
    JSONArray  earthquakes = jsonLocatii.getJSONArray("earthquakes");

    for(int i=0;i<earthquakes.length();i++){                        
        JSONObject e = earthquakes.getJSONObject(i);                
        String id = e.getString(TAG_IDLOCATIE);
        String name = e.getString(TAG_LOCATIE);             
        locatiiList.add(new Locatii(id, name.toUpperCase()));        
    }   
// Move these out of the for loop.
    locatii = (Spinner) findViewById(R.id.spinLocatie);
    LocatiiAdapter cAdapter = new LocatiiAdapter(this, android.R.layout.simple_spinner_item, locatiiList);
    locatii.setAdapter(cAdapter);                 

 } catch(JSONException e) {
     Log.e("log_tag", "Error parsing data "+e.toString());
 }

locatii.setSelection(getIndex(locatii, locatie));

private int getIndex(Spinner spinner, String myString) {
    for (int i=0;i<spinner.getCount();i++){
        if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)){
            return i;
        }
    }
    // Check for this when you set the position.
    return -1;
}
  • 0
    спасибо за Ваш ответ. У меня есть значение, сохраненное в настройках, и когда я запускаю действие, я хочу заполнить счетчик значениями из таблицы MySQL и установить выбранное значение счетчика на значение, равное моему сохраненному значению. Я попробовал ваше решение, но получил ошибку "метод getPosition (Locatii) в типе ArrayAdapter <Locatii> не применим для аргументов (String) ". Моя таблица имеет 2 столбца: idlocatie и locatie.
  • 0
    Спасибо, это работает, но мне пришлось изменить класс Locatii, и теперь мой счетчик показывает идентификатор, а не имя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню