Android - Как изменить файл для просмотра с SharedPreferences - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь использовать эту функцию, но не могу.У моего приложения нет базы данных SQL, есть только XML-файлы.Я хотел бы изменить файл для просмотра в настройках предпочтений, например, я смог бы просмотреть или файл data.xml, или файл data2.xml, отметив или сняв флажок.*

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 / raw.Спасибо за вашу помощь.

1 Ответ

1 голос
/ 17 февраля 2012

просто установите булевы общие префы и используйте их.Поместите их как глобальные переменные ...

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

Затем в onCreate() put

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 true, он использует data.xml, если false, он использует data2.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...