查找偏好代码优化
问题描述:
我正在写我的第一个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;
}
}
分配此监听到所有的喜好和乐趣。在这种情况下,您的代码现在看起来不会像现在这样。
答
动态添加首选项并将其存储为字段或类似内容可能是一个好开始,但我认为这不会改进代码。
非常感谢你:)我认为这对我来说是完美的。公认。 – 2012-01-06 11:44:47