2017-12-07 4 views
-1

spinner의 sharedpreferances와 관련된 문제가 있습니다. 두 개의 스피너가 있습니다. 공유 우선 순위로 내 스피너를 저장하고 싶습니다. 첫 번째 회 전자는 저장할 수 있지만 두 번째는 저장할 수 없습니다. sombody는 제발 나를 도울 수 있습니다. 덕분에 . 스피너에서 sharedpreferances 문제가 있습니다. 스피너 2 개가 있습니다. 공유 우선 순위로 내 스피너를 저장하고 싶습니다. 첫 번째 스피너는 저장할 수 있지만 두 번째는 저장할 수 없습니다. sombody는 제게 에게 감사합니다. 다음 모두 동일Spinner의 SharedPreferances

을 : 다음

final String KEY_SavedSel = "Saved Selection"; 
final String KEY_SavedSe2 = "Saved Selection"; 

변경을 같이

public class MyAndroidAppActivity extends AppCompatActivity { 

    String india[]={"humains","elfes","hobbits"}; 
    String m[]={"PUNE","Mumbai","yoo"}; 
    String b[]={"Arwen","Elrond","Galadriel","Legolas"}; 
    String u[]={"sup","trankill","Conor","Mcgregor","Nate Diaz"}; 

    Spinner s,s1,s2; 
    private Button btnSubmit; 
    SharedPreferences mypref; 
    final String KEY_SavedSel = "Saved Selection"; 
    final String KEY_SavedSe2 = "Saved Selection"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_android_app); 
     s=(Spinner)findViewById(R.id.spinner1); 
     s1=(Spinner)findViewById(R.id.spinner2); 
     btnSubmit = (Button) findViewById(R.id.btnSubmit); 



     final ArrayAdapter<String>ia=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,india); 

     final ArrayAdapter<String>ma=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m); 

     final ArrayAdapter<String>ba=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,b); 

     final ArrayAdapter<String>ua=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,u); 

     ia.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     s.setAdapter(ia); 
     mypref = getPreferences(MODE_PRIVATE); 
     int prefsInt = mypref.getInt(KEY_SavedSel, -1); 
     int prefsInt1 = mypref.getInt(KEY_SavedSe2,-1); 
     if(prefsInt != -1){ 
      s.setSelection(prefsInt); 

     } 

     if(prefsInt1 != -1){ 
      s1.setSelection(prefsInt1); 
     } 



     s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       switch (parent.getId()){ 
        case R.id.spinner1:{ 
         SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
         editor.putInt(KEY_SavedSel, position); 
         editor.putInt(KEY_SavedSe2, position); 
         editor.commit(); 
         if(india[position].equals("humains")){ 
          ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
          s1.setAdapter(ma); 


         } 
         if(india[position].equals("elfes")){ 

          ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
          s1.setAdapter(ba); 


         } 
         if(india[position].equals("hobbits")){ 

          ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
          s1.setAdapter(ua); 


         } 

        } 


       } 

      } 


      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 

     }); 

     btnSubmit.setOnClickListener(new OnClickListener() { 

      @Override 

      public void onClick(View v) { 

       Toast.makeText(MyAndroidAppActivity.this, 

         "Resultat : " + 

           "\nSpinner 1 : "+ String.valueOf(s.getSelectedItem()) + 

           "\nSpinner 2 : "+ String.valueOf(s1.getSelectedItem()), 

         Toast.LENGTH_SHORT).show(); 

      } 


     }); 



    } 

} 
+0

업데이트 된 답변을 확인 했습니까? –

+0

예. 작동하지 않습니다. – momo

답변

1

된 SharedPreferences 키, 그렇지 않으면 두 번째 회는 첫 회

예에서 저장 한 값을 무시합니다 달라야합니다.

final String KEY_SavedSel = "Saved Selection"; 
final String KEY_SavedSe2 = "Saved Selection2"; 

다음은 아래와 같이 사용할 수 있습니다 및 코드

s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
      editor.putInt(KEY_SavedSel, position); 
      editor.commit(); 

      if (india[position].equals("humains")) { 
       ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       s1.setAdapter(ma); 


      } 
      if (india[position].equals("elfes")) { 

       ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       s1.setAdapter(ba); 


      } 
      if (india[position].equals("hobbits")) { 

       ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       s1.setAdapter(ua); 

      } 

      s1.setSelection(mypref.getInt(KEY_SavedSe2, -1)); 


     } 

     @Override 
     public void onNothingSelected(final AdapterView<?> adapterView) { 

     } 


    }); 

    s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
      editor.putInt(KEY_SavedSe2, position); 
      editor.commit(); 

      if (b[position].equals("Arwen")) { 
       // TODO: Do something 

      } 
      if (b[position].equals("Elrond")) { 
       // TODO: Do something 


      } 
      if (b[position].equals("Galadriel")) { 
       // TODO: Do something 

      } 
      if (b[position].equals("Legolas")) { 
       // TODO: Do something 

      } 




     } 

     @Override 
     public void onNothingSelected(final AdapterView<?> adapterView) { 

     } 


    }); 

} 

을에 나중에 값을 검색 그리고 내부 또한 다음 줄을

s1.setSelection(mypref.getInt(KEY_SavedSe2, -1));

를 추가해야합니다 당신의 s.setOnItemSelectedListener 위의 그림과 같이 앱이 다시 시작될 때마다 s.setOnItemSelectedListener이 호출되고 두 번째 스피너가 선택되어 있지 않기 때문에 그들을 적절하게 추가하고 거기에 귀하의 초기 문제를 해결할 것입니다.

+0

감사합니다.이 답변은 작동하지 않습니다. 정확하게 작동 했습니까? 당신이 말한 – momo

+0

@momo 당신이 그것을 검색하려고 할 때 SharedPreferences에서 나오는 값은 무엇입니까? –

+0

예를 들어 첫 번째 스피너에서 humains를 선택한 경우 두 번째 스피너는 PUNE, 뭄바이, , "Elrond", "Galadriel", "Legolas" – momo

0

당신은 두 개의 서로 다른 키를 가지고 가야

final String KEY_SavedSel = "Saved Selection1"; 
final String KEY_SavedSe2 = "Saved Selection2"; 

및 어댑터를 설정하는 동안, 당신은 spinner2의 항목 선택으로 간주되지 않습니다. 스피너 2에 대해서도 가치를 두어야합니다. 다음의 경우도 추가하십시오.

 case R.id.spinner2:{ 
        SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
        // editor.putInt(KEY_SavedSel, position); 

       // your remaining code. 

        editor.putInt(KEY_SavedSe2, position); 
        editor.commit(); 
        } 
+0

작동하는지 알려주세요. –

+0

답장을 보내 주셔서 감사합니다. 그러나 작동하지 않습니다. – momo

+0

아니요 제가 말씀 드린 것은 첫 번째 회 전자는 작동하지만 두 번째 것은 작동하지 않습니다. – momo

관련 문제