查找偏好代码优化

查找偏好代码优化

问题描述:

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

您可以为您的所有首选项制作一个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

非常感谢你:)我认为这对我来说是完美的。公认。 – 2012-01-06 11:44:47

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