2017-02-11 8 views
0

スピナーをユーザー入力に反応させようとしていますが、アイテムの1つを押すと何も起こりません。私は間違って何をしたのかわからないので、IDEやランタイム中にエラーが発生していません。誰も助けることができますか?スピナーがユーザーに反応しない

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

まず、スピナーにリスナーを追加する必要があります。 ==オペレータは、すべてのif文のfalse内部を返して、

themeSpinner.setOnItemSelectedListener(this); 

次へ:onCreateメソッド内のコード行を追加します。

文字列を比較するには、.equals()メソッドを使用する必要があります。 ==演算子は、オブジェクトが同じメモリ位置を参照しているかどうかをチェックします。あなたの場合、変数と"any of strings in if statement"は同じオブジェクトまたはメモリを参照していません。

一方、.equals()は、変数の実際の内容を比較します。したがって、if文ではfalseになり、内部のコードは実行されません。

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'に変更しようとすることはできますか?また、 'onItemSelected'が – Marat

+0

と呼ばれている場合は、' Log.v'でチェックしてください。それは動作しません。私はチェックして、私はonItemSelectedが呼び出されているとは思わない。 –

関連する問題