2017-02-11 3 views
0

Я пытаюсь получить счетчик, чтобы реагировать на ввод пользователя, однако, когда я нажимаю на один из элементов, ничего не происходит. Я не получаю никаких ошибок в среде IDE или во время выполнения, поэтому я понятия не имею, что я сделал неправильно. Может ли кто-нибудь помочь?Spinner не реагирует на пользователя

public class settings extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 
String selected; 
int themeno; 
String [] themes = {"Green with blue (Default)", "Green with red", "Green with orange", "Green with yellow", "Green with green", "Green with pink", "Green with purple"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 
    SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("Settings", Context.MODE_PRIVATE); 

    themeno = sharedPref.getInt("Theme", 1); 

    Spinner themeSpinner = (Spinner) findViewById(R.id.spinner); 

    if(themeno == 1){ 
     setTheme(R.style.AppTheme); 
     themeSpinner.setSelection(1); 
    } else if (themeno == 2){ 
     setTheme(R.style.AppTheme2); 
     themeSpinner.setSelection(2); 
    } else if (themeno == 3){ 
     setTheme(R.style.AppTheme3); 
     themeSpinner.setSelection(3); 
    } else if (themeno == 4){ 
     setTheme(R.style.AppTheme4); 
     themeSpinner.setSelection(4); 
    } else if (themeno == 5){ 
     setTheme(R.style.AppTheme5); 
     themeSpinner.setSelection(5); 
    } else if (themeno == 6){ 
     setTheme(R.style.AppTheme6); 
     themeSpinner.setSelection(6); 
    } else if (themeno == 7){ 
     setTheme(R.style.AppTheme7); 
     themeSpinner.setSelection(7); 
    } 



    ArrayAdapter<String> adapter = new ArrayAdapter<String>(settings.this, android.R.layout.simple_list_item_1 , themes); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    themeSpinner.setAdapter(adapter); 
} 


@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("Settings", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    selected = parent.getItemAtPosition(position).toString(); 
    Toast toast = Toast.makeText(getApplicationContext(), "Theme selected. Colours will change when you close settings.", Toast.LENGTH_SHORT); 

    if(selected == "Green with blue (Default)"){ 
     editor.putInt("Theme", 1); 
     toast.show(); 
    } 

    if(selected == "Green with red"){ 
     editor.putInt("Theme", 2); 
     toast.show(); 
    } 

    if(selected == "Green with orange"){ 
     editor.putInt("Theme", 3); 
     toast.show(); 
    } 

    if(selected == "Green with yellow"){ 
     editor.putInt("Theme", 4); 
     toast.show(); 
    } 

    if(selected == "Green with green"){ 
     editor.putInt("Theme", 5); 
     toast.show(); 
    } 

    if(selected == "Green with pink"){ 
     editor.putInt("Theme", 6); 
     toast.show(); 
    } 

    if(selected == "Green with purple"){ 
     editor.putInt("Theme", 7); 
     toast.show(); 
    } 
} 

ответ

2

Прежде всего, вам нужно добавить слушателя к вашему счетчику. Добавьте эту строку кода в onCreate метода:

themeSpinner.setOnItemSelectedListener(this); 

Далее == оператор возвращается false внутри всех if заявлений.

Вы должны использовать метод .equals() для сравнения строк. Оператор == проверяет, относятся ли объекты к одному и тому же месту памяти. В вашем случае переменная selected и "any of strings in if statement" не относятся к одному объекту или памяти.

С другой стороны, .equals() будет сравнивать фактическое содержание переменных. Таким образом, вы получаете false в if, и ни один из кода внутри не выполняется.

if("Green with blue (Default)".equals(selected)) { 
    editor.putInt("Theme", 1); 
    toast.show(); 
} 
+0

Он по-прежнему не работает. Я добавил toast.show(); перед утверждениями if, чтобы убедиться, что это проблема, но она даже не показала этого, поэтому я думаю, что метод просто не вызван, но я не знаю, почему. –

+0

@zakwoolley не уверен, что он будет работать, но вы можете попытаться изменить 'android.R.layout.simple_list_item_1' на' android.R.layout.simple_spinner_item'? Кроме того, проверьте с 'Log.v', если' onItemSelected' получает вызов – Marat

+0

Нет, это не работает. Я проверил, и я не думаю, что onItemSelected получает вызов. –

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

  • Нет связанных вопросов^_^