0

我正在编写我的第一个 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了很多次,我一点也不喜欢。任何人都可以提出更好的建议吗?

4

2 回答 2

1

您可以为您的所有首选项创建一个 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;
    }
}

将此侦听器分配给您的所有偏好并玩得开心。在这种情况下,您的代码不会像现在这样。

于 2012-01-05T23:18:38.647 回答
0

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

于 2012-01-05T23:06:30.187 回答