Autore Topic: onSharedPreferenceChanged - correzione automatica  (Letto 379 volte)

Offline dany_andy

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer
  • Sistema operativo:
    Windows 7
onSharedPreferenceChanged - correzione automatica
« il: 06 Novembre 2011, 07:22:07 CET »
0
Ciao a tutti, ho una EditTextPreference in cui inserire un MAC address, nella callback controllo ed eventualmente correggo il field immesso, la callback funziona, ma per evitare il loop ho usato una soluzione che mi pare poco "pulita", prima della setText deregistro la callback, faccio la setText e riregistro la callback. Che ne pensate c'e' un altro modo, magari piu' semplice e soprattutto piu' pulito ?

TY
Daniele

Codice (Java): [Seleziona]
   
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        if ("targetMAC".equals(key)) {
            String value = sharedPreferences.getString(key, "");
            SharedPreferences WOLsysflag = getPreferences(MODE_WORLD_WRITEABLE);
            boolean targetMAC_valid = WOLsysflag.getBoolean("targetMAC_valid", true);
            String tempMac = new String();
           
            SharedPreferences.Editor editor = WOLsysflag.edit();
            try {
                tempMac = value.replaceAll("([- :])+", ":");
                if(tempMac.matches("^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$") ) {
                    targetMAC_valid = true;
                } else {
                    Toast t = Toast.makeText(getBaseContext(), "Invalid MAC Address " + tempMac, Toast.LENGTH_LONG);
                    t.show();                  
                    targetMAC_valid = false;
                }
            } catch (RuntimeException e) {
                Toast t = Toast.makeText(getBaseContext(), e.getLocalizedMessage(), Toast.LENGTH_LONG);
                t.show();
            }
            targetMACObject.setSummary(tempMac);
            getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);            
            targetMACObject.setText(tempMac);
            getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
           
           
            editor.putBoolean("targetMAC_valid", targetMAC_valid);
            editor.commit();              
        }
    }
« Ultima modifica: 06 Novembre 2011, 12:04:52 CET da Ricky`, Reason: tasto code »