Autore Topic: Visualizzare valore RingtonePreference nel summary  (Letto 701 volte)

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Visualizzare valore RingtonePreference nel summary
« il: 20 Gennaio 2014, 19:37:33 CET »
0
Ciao a tutti!
sono qui per chiedere un aiuto.
Nella mia app ho implementato le RingtonePreference ma non riesco a visualizzare la suoneria scelta nel relativo summary. Con la ListPreference utilizzato il metodo getEntry() ma con le RingtonePreference non funzia. Ho cercato anche in rete ma non ho trovato praticamente nulla.

Vi posto il codice utilizzato con le listpreference:
Codice (Java): [Seleziona]
//setto la listpreference
           ListPreference suoneriaPrefs = (ListPreference) findPreference("suoneriaPrefs");
           
           //imposto la descrizione in base all'item selezionato
           suoneriaPrefs.setSummary(suoneriaPrefs.getEntry());
           
           suoneriaPrefs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
               
                @Override
                public boolean onPreferenceChange(Preference preference, Object o) {
                        // TODO Auto-generated method stub
                        preference.setSummary(o.toString());
                        return true;
                }
        });

Qualcuno potrebbe illuminarmi?

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #1 il: 20 Gennaio 2014, 22:05:26 CET »
+1
Devi registrare un  OnSharedPreferenceChangeListener
Implementando il metodo onSharedPreferenceChanged puoi fare qualcosa di simile a questo (da provare).

Codice (Java): [Seleziona]
      @Override
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                        String key) {

          Preference pref= findPreference(key)
          if (pref instanceof RingtonePreference) {
                // RingtonePreference
                RingtonePreference rtPref = (RingtonePreference) pref;
                String uri;
                if (rtPref != null) {
                        uri = sharedPreferences.getString(rtPref.getKey(), null);
                        if (uri != null) {
                                Ringtone ringtone = RingtoneManager.getRingtone(
                                                getActivity(), Uri.parse(uri));
                                        pref.setSummary(ringtone.getTitle(getActivity()));
                        }
                }
            }  
      }

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #2 il: 21 Gennaio 2014, 19:45:10 CET »
0
Devi registrare un  OnSharedPreferenceChangeListener
Implementando il metodo onSharedPreferenceChanged puoi fare qualcosa di simile a questo (da provare).

Codice (Java): [Seleziona]
      @Override
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                        String key) {

          Preference pref= findPreference(key)
          if (pref instanceof RingtonePreference) {
                // RingtonePreference
                RingtonePreference rtPref = (RingtonePreference) pref;
                String uri;
                if (rtPref != null) {
                        uri = sharedPreferences.getString(rtPref.getKey(), null);
                        if (uri != null) {
                                Ringtone ringtone = RingtoneManager.getRingtone(
                                                getActivity(), Uri.parse(uri));
                                        pref.setSummary(ringtone.getTitle(getActivity()));
                        }
                }
            }  
      }

Ho provato il tuo codice ma mi da errore nell'onSharedPreferenceChanged...
Non sapendo dove sbattere la testa, continuando a spulciare ho trovato questo (lo riporto così come lo trovato) :

Codice (Java): [Seleziona]
@Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            updateRingtoneSummary((RingtonePreference) preference, Uri.parse((String) newValue));
            return true;
        }

        private void updateRingtoneSummary(RingtonePreference preference, Uri ringtoneUri) {
            Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
            if (ringtone != null)
                preference.setSummary(ringtone.getTitle(this));
            else
                preference.setSummary("Silent");
        }


@Override
        protected void onResume() {
            super.onResume();

            // A patch to overcome OnSharedPreferenceChange not being called by RingtonePreference bug
            RingtonePreference pref = (RingtonePreference) findPreference("ringtonePreference");
            pref.setOnPreferenceChangeListener(this);

        }

Provandolo, funziona ma....nell'onResume credo ci sia una dimenticanza in quanto, quando rientro nelle impostazioni, il summary delle RingtonePreference non mostra più il titolo della suoneria ma quello settato da me nell'xml...

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #3 il: 21 Gennaio 2014, 20:14:45 CET »
0
Ho provato il tuo codice ma mi da errore nell'onSharedPreferenceChanged...

Che errore è?

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #4 il: 22 Gennaio 2014, 21:14:32 CET »
0
Che errore è?

Mi chiedeva di rimuovere l'@Override dall'onSharedPreferenceChangedma non avevo letto bene la tua risposta...infatti mancava la registrazione e l'implementazione dell'OnSharedPreferenceChangeListener.
Dopo aver aggiunto quello che mancava, funziona tutto ma rimane sempre il problema che quando rientro nell'activity delle impostazioni il summary delle ringtonepreference si setta su quello che ho impostato io nel relativo file xml.


Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #5 il: 23 Gennaio 2014, 09:47:17 CET »
+1
Perchè chiaramente quando apri la videata devi inizializzare il valore chiamando lo stesso metodo.
Quel metodo viene chiamato in automatico dal listener quando cambiano i valori, non quando apri la videata.

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:Visualizzare valore RingtonePreference nel summary
« Risposta #6 il: 23 Gennaio 2014, 19:23:23 CET »
0
Perchè chiaramente quando apri la videata devi inizializzare il valore chiamando lo stesso metodo.
Quel metodo viene chiamato in automatico dal listener quando cambiano i valori, non quando apri la videata.

Perfetto!!! Risolto!!! Ti ringrazio!!!!
Ho implementato il tuo metodo nell'onResume. Se a qualcuno puo' servire posto il codice utilizzato:

Codice (Java): [Seleziona]
@Override
        public void onResume() {
            super.onResume();
           
            SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
            Preference pref= findPreference("ringtonePreference");
        if (pref instanceof RingtonePreference) {
                // RingtonePreference
            RingtonePreference ringtonePreference = (RingtonePreference) pref;
            String uri;
            if (ringtonePreference != null) {
                uri = settings.getString(ringtonePreference.getKey(), null);
                if (uri != null) {
                        Ringtone ringtone = RingtoneManager.getRingtone(this, Uri.parse(uri));
                        pref.setSummary(ringtone.getTitle(this));
                       
                }
               
            }
           
        }  
        }

Potete chiudere.