两个链接的微调器未保存为共享首选项

Two linked spinners not saving as shared preferences

我可以使用 .

将一个微调器保存为共享首选项

但是我需要多个微调器相互关联,当我尝试保存它们时遇到问题,我不确定为什么。

这是我的微调器的链接方式。第一个微调器在被选中时启用第二个微调器。

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

这是由上面的微调器启用的另一个微调器

//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;
            }

这是我的加载数据

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


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

这是我保存偏好的地方:

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

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

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

如果两个微调器的代码在同一个 class 中,那么您就完全弄乱了 spinneradapter 属性。为什么不为不同的微调器和两个不同的适配器创建两个变量?

您的第一个微调器的 onItemSelected() 方法是错误的。首先你将变量指向第二个微调器,为它设置一个适配器,最后你禁用它 - 我真的不知道你这样做的意图是什么。您是要重复使用相同的 Spinner 并用不同的数据填充它(因此具有不同的含义),还是您有两个单独的 Spinner 视图?

假设你有两个不同的Spinner,我会做这样的事情(代码仍然不够清晰,但作为起点):

// 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;
        }
        ......
    }
}