【问题标题】:Load and save Spinner selection inSharedPreferencies with setOnItemSelected使用 setOnItemSelected 在SharedPreferences 中加载和保存微调器选择
【发布时间】:2012-08-28 03:33:21
【问题描述】:

我用 OnItemSelectedListener 函数做了一个微调器。我是从一个包含 4 个选项的数组中创建的:

        String[] arrayOfString = new String[4];
    arrayOfString[0] = "Kiskunfélegyháza HQ [160kbps MP3]";
    arrayOfString[1] = "Kiskunfélegyháza MQ [64kbps AAC]";
    arrayOfString[2] = "Kiskunmajsa HQ [160kbps MP3]";
    arrayOfString[3] = "Kiskunmajsa MQ [64kbps AAC]";
    this.items = arrayOfString;

加载数据:

        PreferenceManager.setDefaultValues(this, 0x7f040000, false);
    final SharedPreferences localSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    this.mWebView_enabled = localSharedPreferences.getBoolean("mWebView_enabled", true);
    this.savszelesseg_port = localSharedPreferences.getString("savszelesseg_mentes", "savszelesseg_port");
    this.savszelesseg_saved = this.savszelesseg_port;

           final Spinner localSpinner = (Spinner)findViewById(R.id.savszelesseg);
    ArrayAdapter localArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, this.items);
    localArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    localSpinner.setAdapter(localArrayAdapter);

如果有人选择了一个选项,它将被保存到 SharedPreferencies 并更改音乐。但是当有人退出然后重新打开应用程序时如何取回数据?

我将它保存为 savszelesseg_mentes,并保存 savszelesseg_port。我还有一个选项菜单来保存此设置。

    localSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    {
        public void onItemSelected(AdapterView parentView, View paramView, int paramInt, long paramLong) 
        {
            if (!savszelesseg_port_modositva)
            {
              savszelesseg_port = localSharedPreferences.getString("savszelesseg_mentes", "savszelesseg_port");
              savszelesseg_port_modositva = true;

            }
            savszelesseg_beallitas = items[paramInt];

            if (savszelesseg_beallitas == "Kiskunfélegyháza HQ [160kbps MP3]")
            {
              savszelesseg_port = "8500/relay_911";
              SharedPreferences.Editor editor = localSharedPreferences.edit();
              editor.putString("savszelesseg_mentes", savszelesseg_port);
              editor.commit();
            }
            if (savszelesseg_beallitas == "Kiskunfélegyháza MQ [64kbps AAC]")
            {
              savszelesseg_port = "8500/relay_mobile_911";
              SharedPreferences.Editor editor = localSharedPreferences.edit();
              editor.putString("savszelesseg_mentes", savszelesseg_port);
              editor.commit();
            }
            if (savszelesseg_beallitas == "Kiskunmajsa HQ [160kbps MP3]")
            {
              savszelesseg_port = "8500/relay_882";
              SharedPreferences.Editor editor = localSharedPreferences.edit();
              editor.putString("savszelesseg_mentes", savszelesseg_port);
              editor.commit();
            }
            if (savszelesseg_beallitas == "Kiskunmajsa MQ [64kbps AAC]")
            {
             savszelesseg_port = "8500/relay_mobile_882";
             SharedPreferences.Editor editor = localSharedPreferences.edit();
             editor.putString("savszelesseg_mentes", savszelesseg_port);
             editor.commit(); 
            }




            if (lejatszas == 1 && savszelesseg_port_modositva)
            {

                  stopPlaying();
                  startPlaying();

            }

            if (lejatszas == 0 && savszelesseg_port_modositva == true)
            {
              startPlaying();
            }


        }

如果没有选择:

        public void onNothingSelected(AdapterView parentView) 
        {
        }

【问题讨论】:

  • 您的 if 语句应该是“equals(str)”而不是“== str”。只是一个通知
  • 已更改,但微调器仍未从 sharedprefs 加载保存的值。
  • 显示你的加载数据的代码。

标签: android spinner sharedpreferences default-value


【解决方案1】:

你正在比较字符串而不是引用,所以使用 equals() 方法不要使用 ==

你正在使用

if (savszelesseg_beallitas == "Kiskunfélegyháza HQ [160kbps MP3]")

改用

if (savszelesseg_beallitas.equals("Kiskunfélegyháza HQ [160kbps MP3]"))

if ("Kiskunfélegyháza HQ [160kbps MP3]".equals(savszelesseg_beallitas));

If statement wont execute even though evaluation is true

【讨论】:

  • 已更改,但微调器仍未加载保存的数据。
【解决方案2】:

这样的事情,你应该这样做以获取数据,然后设置正确的选择:

int index = 0;
String savedString = localSharedPreferences.getString("savszelesseg_mentes", "");
for(int i = 0; i < arrayOfString.length(); i++){
    if(savedString.equals(arrayOfString[i])){
        index = i;
        break;
    }
}
localSpinner.setSelection(index, true);

【讨论】:

  • 这个放在哪里?之后: final Spinner localSpinner = (Spinner)findViewById(R.id.savszelesseg); ArrayAdapter localArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, this.items); localArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); localSpinner.setAdapter(localArrayAdapter);
  • 你可以覆盖 onStart() 并把它放在那里。
  • 不要使用它,只是 oncreate :)
  • 在你初始化“localSharedPreferences”和“localSpinner”之后把它放到create中。因为您希望在开始活动时发生这种情况。
  • 我还有一个问题:int index = 0; for(int i = 0; i
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
相关资源
最近更新 更多