Autore Topic: CheckBoxPreference abilitazione - disabilitazione altri aree  (Letto 765 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
CheckBoxPreference abilitazione - disabilitazione altri aree
« il: 30 Marzo 2012, 09:32:46 CEST »
0
Vorrei che abilitando / disabilitando un CheckBoxPreference si abilitasse / disabilitasse anche il CheckBoxPreference di sotto. Come si fa da codice ? Grazie

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #1 il: 30 Marzo 2012, 12:07:20 CEST »
+1
Tipo:

Codice (Java): [Seleziona]
public final class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

        private final String KEY_CHECKBOX_MAIN = "preferences_key_main";
        private final String KEY_CHECKBOX_CHILD_1 = "preferences_key_child_1";
        private final String KEY_CHECKBOX_CHILD_2 = "preferences_key_child_2";
        private CheckBoxPreference cbMain;
        private CheckBoxPreference cbChild1;
        private CheckBoxPreference cbChild2;

        private CheckBoxPreference skipSystemApps;

        @Override
        protected void onCreate(Bundle icicle) {
                super.onCreate(icicle);

                addPreferencesFromResource(R.xml.preferences);

                cbMain = (CheckBoxPreference) findPreference(KEY_CHECKBOX_MAIN);
                cbChild1 = (CheckBoxPreference) findPreference(KEY_CHECKBOX_CHILD_1);
                cbChild2 = (CheckBoxPreference) findPreference(KEY_CHECKBOX_CHILD_2);

        }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                if (key.equals(KEY_CHECKBOX_MAIN)) {
                        cbChild1.setChecked(cbMain.isChecked());
                        cbChild2.setChecked(cbMain.isChecked());
                }

        }
       
        @Override
        protected void onResume() {
                super.onResume();
                getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        }

        @Override
        protected void onPause() {
                super.onPause();
                getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        }
}

Il file preferences.xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

        <PreferenceCategory android:title="Test">

                <CheckBoxPreference android:defaultValue="true"
                        android:key="preferences_key_main" android:summary="Checkbox main"
                        android:title="Checkbox main" />

                <CheckBoxPreference android:defaultValue="true"
                        android:key="preferences_key_child_1" android:summary="Checkbox child 1"
                        android:title="Checkbox child 1" />

                <CheckBoxPreference android:defaultValue="true"
                        android:key="preferences_key_child_2" android:summary="Checkbox child 2"
                        android:title="Checkbox child 2" />
        </PreferenceCategory>



</PreferenceScreen>


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #2 il: 30 Marzo 2012, 12:45:29 CEST »
0
Grazie ;)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #3 il: 02 Aprile 2012, 00:52:18 CEST »
0
Scusami demper, usando solo il codice mi viene così :

Codice (Java): [Seleziona]
pref2_5 = new CheckBoxPreference(this);
                pref2_5.setTitle(getResources().getString(R.string.notifica_chat_barra));
                pref2_5.setSummary(getResources().getString(R.string.notifica_chat_barra_summery));
                pref2_5.setKey("chat_notifica");
               
                pref2_4 = new CheckBoxPreference(this);
                pref2_4.setTitle(getResources().getString(R.string.notifica_chats));
                pref2_4.setSummary(getResources().getString(R.string.notifica_chats_summery));
                pref2_4.setKey("suono_chat");
                pref2_4.setEnabled(pref2_5.isChecked());
                pref2_4.setChecked(pref2_5.isChecked());

@Override
        protected void onResume() {
                pref_screen.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
                super.onResume();
        }


        @Override
        protected void onPause() {
                pref_screen.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
                super.onPause();
        }


        @Override
        public void onSharedPreferenceChanged(SharedPreferences arg0, String key) {
                 if (key.equals(pref2_5.getKey())) {
                         pref2_4.setEnabled(pref2_5.isChecked());
                         pref2_4.setChecked(pref2_5.isChecked());
       
     }

quando cambio i valori tutto funziona perfettamente, il problema è quando avvio l'applicazione perchè anche se il pref2_5 è checckato il pref2_4 mi risulta cekkato ma disabilitato invece dovrebbe essere abilitato.

Mi sai dire perchè ?

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #4 il: 02 Aprile 2012, 08:14:18 CEST »
0
Sul tuo preferences.xml hai impostato l'attributo android:dependency?
Eventualmente nell'onCreate o nel lister puoi utilizzare il setDisableDependentsState(true/false) a livello di CheckBoxPreference.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #5 il: 02 Aprile 2012, 10:31:19 CEST »
0
Guarda tutto funziona quando agisci manualmente cioè se abiliti la prkma opzione la secinda si abilita e si cekka e vieversa. Il problema sorge quando abiliti la.prima opzione e qujndi anche la seconda ma poi usendo e rientrando dal programma la prima opzione mi risulta sempre selezionata ed abilitata ma la secinda è disabilitata :-(

Ho provato anche con la linea di codice pref2_4.setDependency(pref2_5.getKey()) ma mi va in errore....

Comunquecalcola chr non ho il.file oreference.xml perché lavoro solo di codice...

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #6 il: 02 Aprile 2012, 10:37:58 CEST »
0
Potresti postare il tuo codice?
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #7 il: 02 Aprile 2012, 10:43:18 CEST »
0
é sopra :-)

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #8 il: 02 Aprile 2012, 10:45:20 CEST »
0
é sopra :-)
Se il codice della PreferenceActivity fosse completo sarebbe meglio....posta anche l'xml.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #9 il: 02 Aprile 2012, 10:50:23 CEST »
0
Ok allora stasera quando rientro in ufficio comunque come ti dicevo non ho file xml faccio tutto da codice

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #10 il: 02 Aprile 2012, 10:57:52 CEST »
0
Ok, anche se io non istanzierei ogni volta
Codice (Java): [Seleziona]
pref2_5 = new CheckBoxPreference(this);
....
pref2_4 = new CheckBoxPreference(this);

quando posti il codice ci do un'occhio....
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #11 il: 02 Aprile 2012, 11:02:54 CEST »
0
Bhe se sono 2 chackbox diversi lo devo fare proprio perchè mi serve per crearlo dwto che faccio tutto da codice...

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:CheckBoxPreference abilitazione - disabilitazione altri aree
« Risposta #12 il: 02 Aprile 2012, 11:08:58 CEST »
0
Certo, immagino che tu le istanzi nell'onCreate(), non si vede dal codice che hai impostato....
Immagino anche che pref2_5 e pref2_4 siano delle variabili private a livello di classe...
L'esempio che ti ho postato all'inizio, mi sembra funzionare correttamente, uscendo e rientrando mi trovo le checkbox settate correttamente...
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial