Autore Topic: Force close alla scelta di un tema personalizzato  (Letto 314 volte)

Offline xmattjus

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Motorola Moto G
  • Sistema operativo:
    Windows 8.1
Force close alla scelta di un tema personalizzato
« il: 12 Luglio 2014, 17:34:22 CEST »
0
Salve a tutti ragazzi, sto avendo problemi con un'applicazione che sto sviluppando, basata su Simple Explorer (https://github.com/DF1E/SimpleExplorer/). Per farla breve, Simple Explorer permette la scelta di due temi (Holo e Holo Light) tramite una voce nelle impostazioni del programma; io ho aggiunto un terzo tema (e conto di aggiungerne altri), chiamato Holo Green. Il problema è che quando vado a scegliere quest'ultimo nelle impostazioni, l'applicazione va in crash.
Il logcat relativo è:
Codice: [Seleziona]
07-12 07:47:19.720      939-939/com.xmattjus.manager E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.xmattjus.manager, PID: 939
    java.lang.NumberFormatException: Invalid int: "1111111000010010000000000001001"
            at java.lang.Integer.invalidInt(Integer.java:137)
            at java.lang.Integer.parse(Integer.java:377)
            at java.lang.Integer.parseInt(Integer.java:365)
            at java.lang.Integer.parseInt(Integer.java:331)
            at com.xmattjus.manager.settings.SettingsFragment$1.onPreferenceChange(SettingsFragment.java:62)
            at android.preference.Preference.callChangeListener(Preference.java:897)
            at android.preference.ListPreference.onDialogClosed(ListPreference.java:273)
            at android.preference.DialogPreference.onDismiss(DialogPreference.java:383)
            at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1238)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
che si riferisce a SettingsFragment.java:
Codice (Java): [Seleziona]
package com.xmattjus.manager.settings;

import android.app.Activity;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;

import com.xmattjus.manager.R;

public final class SettingsFragment extends PreferenceFragment {

        private static final String[] THEMES_VALUES = new String[] {
                        Integer.toBinaryString(R.style.Theme_Green),
            Integer.toString(R.style.Theme_Holo_Light),
                        Integer.toString(R.style.Theme_Holo) };

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.addPreferencesFromResource(R.xml.preferences);
                this.init();
        }

        @Override
        public void onAttach(final Activity activity) {
                super.onAttach(activity);
                if (!(activity instanceof SettingsActivity)) {
                        throw new RuntimeException(
                                        "Should be attached only to SettingsActivity");
                }
        }

        private void init() {
                // final SettingsActivity parent = (SettingsActivity) getActivity();
                final ListPreference theme = (ListPreference) findPreference("preference_theme");
                theme.setEntryValues(THEMES_VALUES);
                theme.setValue(String.valueOf(Settings.mTheme));
                theme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                        @Override
                        public boolean onPreferenceChange(Preference preference,
                                        Object newValue) {
                                final int chosenTheme = Integer.parseInt((String) newValue);
                                if (chosenTheme != Settings.mTheme) {
                                        Settings.mTheme = chosenTheme;
                                        ((SettingsActivity) getActivity()).proxyRestart();
                                        return true;
                                }
                                return false;
                        }
                });
        }
}
Posto anche Settings.java, visto che è nominato nel file di sopra:
Codice (Java): [Seleziona]
package com.xmattjus.manager.settings;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Environment;
import android.preference.PreferenceManager;

import com.xmattjus.manager.R;

public final class Settings {

        public static boolean showthumbnail;
        public static boolean mShowHiddenFiles;
        public static int mListAppearance;
        public static int mSortType;
        public static int mTheme;
        public static String defaultdir;
        private static SharedPreferences p;

        public static void updatePreferences(Context context) {
                p = PreferenceManager.getDefaultSharedPreferences(context);

                mShowHiddenFiles = p.getBoolean("displayhiddenfiles", true);
                showthumbnail = p.getBoolean("showpreview", true);
                mTheme = Integer.parseInt(p.getString("preference_theme",
                                Integer.toString(R.style.Theme_Green)));
                mSortType = Integer.parseInt(p.getString("sort", "1"));
                mListAppearance = Integer.parseInt(p.getString("viewmode", "1"));
                defaultdir = p.getString("defaultdir", Environment
                                .getExternalStorageDirectory().getPath());
        }
}
Gli xml del tema sono corretti, visto che impostando come tema principale Holo Green l'applicazione parte senza problemi. Qualcuno mi potrebbe dare una mano? Grazie!