查找首选项代码优化

时间:2012-01-05 22:51:03

标签: android optimization find preference

我正在写第一张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 个答案:

答案 0 :(得分:1)

您可以为所有首选项创建一个HashMap,其中键将是首选项的名称,并且值将添加一些整数索引。 E.g。

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;
    }
}

将此听众分配给您的所有偏好并享受乐趣。在这种情况下,您的代码将不会像现在这样。

答案 1 :(得分:0)

动态添加首选项并将它们存储为字段或类似内容可能是一个良好的开端,但我认为这不会改进代码。