Two linked spinners not saving as shared preferences

空扰寡人 提交于 2019-12-12 04:05:58

问题


I am able to save one spinner as shared preferences using Spinner not saving as Shared/Saved Preference.

However I need multiple spinners to be interlinked and I am having issues when i try to save them and I am not sure why.

Here is how my spinners are linked. The first Spinner enables second spinner when it is selected.

   spinner = (Spinner)findViewById(R.id.spnMondayExercise); 
    adapter = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {



        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            long item = parent.getItemIdAtPosition(position);
            if (item == 0){
                monExc = 0;
                spinner = (Spinner)findViewById(R.id.spnMondayDuration); 
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setAdapter(adapter);
                spinner.setEnabled(false);
            }

And this is the other spinner which becomes enabled by above spinner

//Monday Duration
    spinner = (Spinner)findViewById(R.id.spnMondayDuration); 
    adapter = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {



        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            long item = parent.getItemIdAtPosition(position);
            if (item == 0){
                monDur = 0;
            }
            else if (item ==1)
            {
                monDur = .16;
            }
            else if (item ==2)
            {
                monDur = .33;
            }

Here is my loadData

private void loadData() {
SharedPreferences prefs = getPreferences(0);


    spnMondayDuration.setSelection(prefs.getInt("spnMonDur", 0));
    spnMondayExercise.setSelection(prefs.getInt("spnMonExc", 0));

This is where I am saving prefernces:

SharedPreferences.Editor editor = getPreferences(0).edit();

                int spnMonDur1 = spnMondayDuration.getSelectedItemPosition();
                int spnMonExc1 = spnMondayExercise.getSelectedItemPosition();

                editor.putInt("spnMonDur", spnMonDur1);
                editor.putInt("spnMonExc", spnMonExc1);
                 editor.commit();

回答1:


If the code for both spinners is in the same class, than you're completely messing the spinner and adapter properties. Why not just create two variables for different spinners and two different adapters?

The onItemSelected() method of your first spinner is wrong. First you point the variable to the second spinner, set an adapter for it and lastly you disable it - I've really no idea what's your intention behind this. Do you want to reuse the same Spinner and populate it with different data (thus different meaning), or you have two separate Spinner views?

Assuming you have two different Spinners, I'd do something like this (code is still not clear enough, but use it as a starting point):

// initialize Exercise spinner
spinnerExercise = (Spinner)findViewById(R.id.spnMondayExercise);
adapterExercise = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
      adapterExercise.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerExercise.setAdapter(adapterExercise);

// initialize Duration spinner
spinnerDuration = (Spinner)findViewById(R.id.spnMondayDuration); 
adapterDuration = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
adapterDuration.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDuration.setAdapter(adapterDuration);

// disable by default until  an exercise is selected
spinnerDuration.setEnabled(false);


spinnerExercise.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, position, long id) {
        long item = parent.getItemIdAtPosition(position);
        if (item == 0){
            monExc = 0;
            spinnerDuration.setEnabled(true);
        }
        ........
    }
}

spinnerDuration.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
         long item = parent.getItemIdAtPosition(position);
        if (item == 0){
            monDur = 0;
        }
        else if (item ==1)
        {
            monDur = .16;
        }
        else if (item ==2)
        {
            monDur = .33;
        }
        ......
    }
}


来源:https://stackoverflow.com/questions/35670184/two-linked-spinners-not-saving-as-shared-preferences

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!