Spinners中的SharedPreferances

时间:2017-12-07 16:58:52

标签: android android-spinner android-sharedpreferences

我在旋转器中有共享优惠的问题,我有2个微调器,我想用共享优先保存我的旋转器我可以保存第一个微调器但是我不能保存第二个旋转器,sombody可以帮助我请 谢谢大家。 我在旋转器中有共享优惠的问题,我有2个微调器,我想用共享的优先保存我的旋转器我可以保存第一个微调器,但我不能保存第二个旋转器,sombody可以帮助我请 感谢所有人。

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();

            }


        });



    }

}

2 个答案:

答案 0 :(得分:0)

您必须使用两个不同的键:

以下两个方面都是相同的:

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

按如下方式更改:

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();
                    }

答案 1 :(得分:0)

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时都会调用它并且它没有正确设置第二个微调器选定项目,并通过添加它来修复您的初始值问题。