Spinner не сохраняет последнее выбранное значение - PullRequest
0 голосов
/ 05 июля 2018

У меня есть спиннер в моем приложении для Android, и спиннер переходит к первому элементу всякий раз, когда я перехожу к другому фрагменту и возвращаюсь. Все, что я хочу, это чтобы спиннер сохранил значение. Ниже описано, как я настраиваю счетчик.

private void setupSpinner(){
    roundSpinnerMap = new HashMap<>();
    roundSpinnerItems = new ArrayList<>();
    //Get the day of the week in order to figure out which rounds and variables are needed.
    Calendar c = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy", Locale.US);
    Date d = null;
    try {
        d = format.parse(mDay);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    c.setTime(d);
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
    //If the day is Sunday then dayOfWeek is 7, not 0.
    if(dayOfWeek == 0){
        dayOfWeek = 7;
    }
    for (Models.Round r:rounds) {
        //For each round get the completed and total amount.
        int[] partWhole = models.getCompletedOfTotal(r.getName(), mDay, dayOfWeek, nameText.getText().toString());
        String readable = r.getName() +" (Completed " + partWhole[0] + " of " + partWhole[1] + ")";
        //If there are none to complete, then do not show/add the option.
        if(!readable.contains("of 0")){
            roundSpinnerMap.put(readable, r.getName());
            roundSpinnerItems.add(readable);
        }
    }
    ArrayAdapter<String> roundAdapter = new ArrayAdapter<>(
            getActivity(), R.layout.simple_spinner_item, roundSpinnerItems
    );
    roundAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    roundSpinner.setAdapter(roundAdapter);
    roundSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String readable = roundSpinner.getSelectedItem().toString();
            mRound = roundSpinnerMap.get(readable);
        }

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

        }
    });
}

Ниже приведены мои методы onCreate:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    models = new ModelsHandler(getActivity());
    if (getArguments() != null) {
        mHome = getArguments().getBoolean(ARG_HOME);
        mUser = getArguments().getString(ARG_USER);
        mFacility = getArguments().getString(ARG_FACILITY);
    }
    calendar = Calendar.getInstance();
    mDay = format.format(calendar.getTime());
    sharedPreferences = getActivity().getSharedPreferences(MainActivity.PREFERENCES, Context.MODE_PRIVATE);
    rounds = models.getAllRounds();
    rise = AnimationUtils.loadAnimation(getActivity(), R.anim.rise_vert);
    sink = AnimationUtils.loadAnimation(getActivity(), R.anim.sink_vert);
    if (mListener == null){
        mListener = (OnFragmentInteractionListener) getActivity();
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_splash, container, false);

    roundsButton = view.findViewById(R.id.roundsButton);
    calendarButton = view.findViewById(R.id.calendarButton);
    contactButton = view.findViewById(R.id.contactButton);
    syncMainButton = view.findViewById(R.id.syncMainButton);
    trendButton = view.findViewById(R.id.trendButton);
    prefSyncButton = view.findViewById(R.id.prefSyncButton);
    startSyncButton = view.findViewById(R.id.startSyncButton);
    contactDevButton = view.findViewById(R.id.contactDevButton);
    contactServiceButton = view.findViewById(R.id.contactServiceButton);
    roundSpinner = view.findViewById(R.id.roundSpinner);
    roundDateText = view.findViewById(R.id.roundDateText);
    errorRoundText = view.findViewById(R.id.roundsErrorText);
    nameText = view.findViewById(R.id.nameText);
    progressBar2 = view.findViewById(R.id.progressBar2);

    errorRoundText.setVisibility(View.GONE);
    nameText.setText(sharedPreferences.getString(MainActivity.USER_SESSION_KEY,""));

    progressBar2.setVisibility(View.GONE);
    roundDateText.setText(format.format(calendar.getTime()));
    roundDateText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            launchDatePicker();
        }
    });

    contactActionsOpen = false;
    syncActionsOpen = false;
    if(rounds == null || rounds.isEmpty()){
        errorRoundText.setVisibility(View.VISIBLE);
        UtilityPole.initDefaultRounds(models);
        rounds = models.getAllRounds();
        Toast.makeText(getContext(), getResources().getString(R.string.errorRound), Toast.LENGTH_LONG).show();
    }
    setupSpinner();
    initializeAnimationButtons();
    initializeButtonActions();

    return view;
}

Я пытался использовать общие настройки, но это не сработало (может быть, я не знаю, как правильно их использовать, поскольку я новичок в Android.). Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я не могу комментировать ваш вопрос, поэтому я даю общий ответ

СОХРАНИТЬ И ПОЛУЧИТЬ ЗНАЧЕНИЕ В СПИННЕР

enter image description here

Шаг 1 - Сохраните IndexNumber сохраненного значения в счетчике локально в вашем приложении.

Step2 - Получите сохраненный IndexNumber в вашем методе onCreate и используйте

setSelection метод установки значения для счетчика.

0 голосов
/ 05 июля 2018

Вы сохраняете это как статическое значение. Прошло много времени с тех пор, как я работал с Android API, так что это не будет слишком точным. Просто подставьте правильные вызовы методов, и это будет работать

//have a private static field variable
private static int spinnerValue = 0;

private void getSpinner()
{
    spinnerValue = spinner.getCurrentValue();
}

private void setSpinner()
{
    soinner.setValue(spinnerValue);
}

Это потому, что ключевое слово static заставляет переменную оставаться во всех классах, даже если класс был уничтожен посредством сборки мусора.

Что делает ключевое слово static в классе?

Так что это, вероятно, то, что вы ищете

...