2012-02-17 61 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

相關問題