Найти предпочтительный код оптимизации - PullRequest
0 голосов
/ 06 января 2012

Я пишу свой первый APK и мне нужна помощь. Я обнаружил, что использую много похожего кода, чтобы найти предпочтения из предпочтительного XML.

Вот фрагмент кода:

    final Preference backupPref = findPreference("backuptw");
    backupPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == backupPref)doBackup();
            return true;
        }
    });
    final Preference restorePref = findPreference("restoretw");
    restorePref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == restorePref)doRestore();
            return true;
        }
    });
    final Preference tw160Pref = findPreference("tw160");
    tw160Pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == tw160Pref)doTW("160");
            return true;
        }
    });
    final Preference tw192Pref = findPreference("tw192");
    tw192Pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == tw192Pref)doTW("192");
            return true;
        }
    });
    final Preference tw240Pref = findPreference("tw240");
    tw240Pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == tw240Pref)doTW("240");
            return true;
        }
    });
    final Preference restartPref = findPreference("restart");
    restartPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == restartPref)doRestart();
            return true;
        }
    });
    final Preference sortPref = findPreference("sort");
    sortPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
        public boolean onPreferenceClick(Preference preference) {
            if(preference == sortPref)doSort();
            return true;
        }
    });

Я использую findPreference много раз, что мне совсем не нравится. Кто-нибудь может предложить что-то лучше?

Ответы [ 2 ]

1 голос
/ 06 января 2012

Вы можете создать HashMap для всех ваших предпочтений, где ключами будут имена предпочтений и значения некоторых целочисленных индексов, которые вы добавите. Э.Г.

final int INDEX_BACKUPTW = 0;

HashMap<String, Integer> mPrefMap = new HashMap<String, Integer>();

mPrefMap.put("backuptw", INDEX_BACKUPTW)

И так далее ... Тогда просто сделайте только один onClickListener следующим образом:

OnPreferenceClickListener(){
    public boolean onPreferenceClick(Preference preference) {
        if (preference.hasKey()) {
            int index = mPrefMap.get(preference.getKey());
            switch (index)
            {
                case INDEX_BACKUPTW:
                   doBackup();
                   break;
                case INDEX_SOME_OTHER_INDEX_I_HAVE:
                   doWhatever();
                   break;
                default:
                   Log.e(TAG, "Achtung!");
            }
        }
        return true;
    }
}

Назначьте этому слушателю все ваши предпочтения и получайте удовольствие. В этом случае ваш код не будет выглядеть так, как сейчас.

0 голосов
/ 06 января 2012

Это может быть хорошим началом для динамического добавления настроек и их сохранения в виде поля или аналогичного, но я не думаю, что это будет улучшением кода.

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