2012-01-05 96 views
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很多次了,這是我不喜歡的。任何人都可以提出更好的建議?

回答

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

分配此監聽到所有的喜好和樂趣。在這種情況下,您的代碼現在看起來不會像現在這樣。

+0

非常感謝你:)我認爲這對我來說是完美的。公認。 – 2012-01-06 11:44:47

0

動態添加首選項並將其存儲爲字段或類似內容可能是一個好開始,但我認爲這不會改進代碼。