2012-01-20 63 views
0

我想显示选择的水果作为绘制 我有它,这样可以节省,但我不知道如何从行动嗜好 得到它,使用它的Android得sharedPreferences存储用户选择

我认为可能不会停,如水果= getpreference(像这样)

int resourceID = getResource.getIdentifier(fruit,"drawable",getPackageName()); 

favortieFruit.setImageResource(resourceID); 

Options.java

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.Preference; 
import android.preference.Preference.OnPreferenceClickListener; 
import android.preference.PreferenceActivity; 

public class Options extends PreferenceActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.options); 
     //Get the custom preference 
     Preference customPref = (Preference) findPreference("listPref"); 
     customPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      public boolean onPreferenceClick(Preference preference) { 

       SharedPreferences customSharedPreference = getSharedPreferences("Fruits", Activity.MODE_PRIVATE); 
       SharedPreferences.Editor editor = customSharedPreference.edit(); 

       editor.commit(); 
       return true; 
      } 
     }); 
    } 
} 

Options.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
     <PreferenceCategory 
       android:title="Fruit Selection" android:key="listPref"> 
       <ListPreference android:title="Fruit #1" android:key="listPref1" android:defaultValue="digiGreen" android:entries="@array/Fruits" android:entryValues="@array/listValues" android:summary="Select Fruit #1 "/><ListPreference 
         android:title="Fruit #2" 
         android:summary="Select Fruit #2 " 
         android:key="listPref2" 
         android:defaultValue="digiGreen" 
         android:entries="@array/Fruits" 
         android:entryValues="@array/listValues" /><ListPreference 
         android:title="Fruit #3" 
         android:key="listPref3" 
         android:defaultValue="digiGreen" 
         android:entries="@array/Fruits" 
         android:entryValues="@array/listValues" android:summary="Select Fruit #3 "/><ListPreference 
         android:title="Fruit #4" 
         android:key="listPref4" 
         android:defaultValue="digiGreen" 
         android:entries="@array/Fruits" 
         android:entryValues="@array/listValues" android:summary="Select Fruit #4 "/><ListPreference 
         android:title="Fruit #5" 
         android:key="listPref5" 
         android:defaultValue="digiGreen" 
         android:entries="@array/Fruits" 
         android:entryValues="@array/listValues" android:summary="Select Fruit #5 "/><ListPreference 
         android:title="Fruit #6" 
         android:key="listPref6" 
         android:defaultValue="digiGreen" 
         android:entries="@array/Fruits" 
         android:entryValues="@array/listValues" android:summary="Select Fruit #6 "/> 
     </PreferenceCategory> 
</PreferenceScreen> 

的strings.xml

<string-array name="Fruits"> 
    <item>Apple</item> 
    <item>Pear</item> 
    <item>Grape</item> 
     <item >Berry</item> 
     <item >Tomato</item> 
</string-array> 

<string-array name="listValues"> 
    <item>apple</item> 
    <item>pear</item> 
    <item>grape</item> 
    <item>berry</item> 
    <item>tomato</item> 
</string-array> 

============================= = 实测溶液

Options.java

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class Options extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 

    } 
} 

获取设置

SharedPreferences sp = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     for (int num = 1; num < 7; num++) { 

      String icon = sp.getString("listPref" + num, null); 

      try { 
       Class<drawable> res = R.drawable.class; 
       Field field = res.getField(icon); 
       PoliticiansArray[num] = field.getInt(null); 
       Class<string> stringRes = R.string.class; 
       Field stringField = stringRes.getField(icon); 
       SayingsArray[num] = stringField.getInt(null); 

      } catch (Exception e) { 
       Log.e("MyTag", "Failed", e); 
      } 

回答

1

您应该添加PreferenceChangeListenerListPreference

这是如何从一个ListPreference新选择值的例子:当你想回到您保存价值

final ListPreference myPreference = (ListPreference) findPreference("listPref"); 
    myPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     // @Override 
     public boolean onPreferenceChange(Preference preference, 
       Object newValue) { 
      SharedPreferences customSharedPreference = getSharedPreferences("Fruits", Activity.MODE_PRIVATE); 
      SharedPreferences.Editor editor = customSharedPreference.edit(); 
      editor.putString("favfruit", (String) newValue); 
      editor.commit(); 
      return true; 
     } 
    }); 

在SharedPreferences,像这样做:

SharedPreferences settings = getSharedPreferences("Fruits", Activity.MODE_PRIVATE); 
String fruit= settings.getString("favfruit",null); 

然后,让你的绘制:

int resourceID = getResource.getIdentifier(fruit,"drawable",getPackageName()); 
favortieFruit.setImageResource(resourceID); 
+0

确定最后一件事什么是SharedPreferences设置为零= getSharedPreferences(“Fruits”,0);它是通过0移动到5吗?我是7天前开始的Android编码新手 – zeitue

+1

这是关于权限,请查看这里:http://developer.android.com/reference/android/content/Context.html#getSharedPreferences%28java.lang.String, %20int%29 然而,如果你想多个水果选择....你应该使用几个ListPreference的...而不是一个... – MobileCushion

+0

我将示例代码添加到我的程序,并将listPref更改为listPref1 Fruits to Fruit1所有其他设置仍然保存为什么这不仅应该保存第一个? – zeitue

相关问题