两个链接的微调器未保存为共享首选项 [英] Two linked spinners not saving as shared preferences

查看:71
本文介绍了两个链接的微调器未保存为共享首选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我能够使用将一个微调器保存为共享首选项.微调框未保存为共享/保存的首选项.

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

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

这是我的loadData

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

推荐答案

如果两个微调器的代码都在同一类中,那么您就完全搞砸了spinneradapter属性.为什么不只为不同的微调器和两个不同的适配器创建两个变量?

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?

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

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?

假设您有两个不同的Spinner,我会做类似的事情(代码仍然不够清晰,但是将其用作起点):

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

这篇关于两个链接的微调器未保存为共享首选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆