2012-02-17 42 views
0

我试图来解决这个功能,但我不能。我的应用程序没有SQL数据库,它只有.xml文件。我想通过首选项设置更改文件以查看,例如,我将能够查看或文件data.xml或文件data2.xml检查或取消选中复选框。Android的 - 如何更改文件的查看与SharedPreferences

活动PreferencesFromXml:

public class PreferencesFromXml extends PreferenceActivity{ 

    public static final String COLORE_DEFAULT = "#000000"; 

    public static final String COLORE_PREF = "colore"; 

    public static final String TITOLO_PREF = "titolo"; 

    public static final String USA_TITOLO_CUSTOM_PREF = "usa_titolo_custom"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
      super.onCreate(savedInstanceState); 

      addPreferencesFromResource(R.xml.preferences); 

      SharedPreferences prefs =  PreferenceManager.getDefaultSharedPreferences(this); 

      Preference titoloPrefs = findPreference(TITOLO_PREF); 
      titoloPrefs.setSummary(prefs.getString(TITOLO_PREF, getString(R.string.titolo_custom))); 
      titoloPrefs.setOnPreferenceChangeListener(new OnPreferenceChangeListener() 
      { 
        public boolean onPreferenceChange(Preference prefs, Object value) 
        { 
          prefs.setSummary((CharSequence) value); 
          return true; 
        } 
      }); 
    } 
} 

主要活动:

public class Main extends ExpandableListActivity{ 
    ExpandableListAdapter mAdapter; 
    private ArrayList<Group> groups; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.list_main); 

      groups = readGroupsFromXml(); 

      mAdapter = new MyExpandableListAdapter(getLayoutInflater(), groups); 
      setListAdapter(mAdapter); 
      registerForContextMenu(getExpandableListView()); 
    } 

    public ArrayList<Group> readGroupsFromXml() 
    { 
      try 
      { 
        final XmlHandler handler = new XmlHandler(); 
        final SAXParser sp = SAXParserFactory.newInstance().newSAXParser(); 
        sp.parse(getApplicationContext().getResources().openRawResource(R.raw.data), handler); 
        return handler.getGroups(); 
      } 
      catch (Exception e) 
      { 
        Log.e("Error", "xml", e); 
      } 
      return null; 
    } 

那我就不知道该怎么办,选择是否选择该复选框时使用的文件。我停下来这里(虽然我不知道如果这是正确的):

@Override 
protected void onResume(){ 
    super.onResume(); 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    Editor editor = prefs.edit(); 

    String usa_titolo_custom; 
      if (prefs.getBoolean(PreferencesFromXml.USA_TITOLO_CUSTOM_PREF, false)) 
      { 

正如你可以从代码.xml文件看到位于RES /生。感谢您的帮助。

回答

1

刚刚成立了一个布尔共享的首选项,并使用它。把这些为全局变量...

SharedPreferences data; 
public static String filename = "filename"; 
boolean b; 

然后在onCreate()

data = getSharedPreferences(filename, 0); 

设定

SharedPreferences.Editor editor = data.edit(); 
editor.putBoolean("data", b); 
editor.commit(); 

得到布尔这个样子,哪里default是真的还是假的布尔值,取决于你想要它是什么如果它没有设置。

b = data.getBoolean("data", default); 

然后使用类似

public ArrayList<Group> readGroupsFromXml() { 

b = data.getBoolean("data", false); 
if (b == true){ 
    try { 
     final XmlHandler handler = new XmlHandler(); 
     final SAXParser sp = SAXParserFactory.newInstance().newSAXParser(); 
     sp.parse(getApplicationContext().getResources().openRawResource(R.raw.data), handler); 
     return handler.getGroups(); 
    } catch (Exception e) { 
     Log.e("Error", "xml", e); 
    } 
} else { 
    try { 
     final XmlHandler handler = new XmlHandler(); 
     final SAXParser sp = SAXParserFactory.newInstance().newSAXParser(); 
     sp.parse(getApplicationContext().getResources().openRawResource(R.raw.data2), handler); 
     return handler.getGroups(); 
    } catch (Exception e) { 
     Log.e("Error", "xml", e); 
     } 
    } 
return null; 

} 

如果b是真实的,它使用data.xml中,如果是假的,它使用data2.xml。

+0

非常感谢您的回答。不幸的是,我不明白在哪些活动中放置了代码。 '公共ArrayList readGroupsFromXml(){'等我知道这在主要活动,但其余?我不明白我需要在其他Activity中写什么。复选框是'public static final String USA_TITOLO_CUSTOM_PREF =“usa_titolo_custom”;'。 抱歉打扰你。 – Carontes 2012-02-17 03:04:30

相关问题