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 を1つだけ作成します。

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 に答える