Multe aplicații pot beneficia de Preferințele partajate - răspunsul platformei Android la stocarea permanentă a setărilor aplicațiilor. Există mai multe moduri de a crea interfețe utilizator pentru colectarea și afișarea setărilor persistente pentru utilizatori. Cea mai ușoară modalitate este de a utiliza PreferencesActivity, care oferă un aspect consistent și senzație cu restul platformei, inclusiv preferințele sistemului dispozitivului. Aflați cum să utilizați PreferencesActivity în acest tutorial.
Simpla aplicație de citire a feedului tutorialului Mobiletuts, care încă nu are un nume oficial (am referit la acesta ca TutList), are nevoie de un control mai bun al utilizatorului asupra procesului de actualizare a fundalului. Prin urmare, vom adăuga o singură preferință pentru a ajuta la controlul actualizării fundalului.
Acest tutorial se bazează pe tutorialele anterioare, inclusiv aplicațiile Android Essentials: Preferințe de aplicații și seria continuă privind activitatea noastră TutList cu cel mai recent tutorial, Fundamente Android: Programarea sarcinilor recurente. Dacă întâmpinați dificultăți, păstrați-vă întrebări în secțiunea de comentarii - mulți oameni citesc și răspund, inclusiv noi înșine. De asemenea, nu uitați de referința Android SDK.
Ultimul cod eșantion care însoțește acest tutorial este disponibil pentru descărcare ca sursă open-source de la găzduirea codului Google.
Acest tutorial presupune că veți începe în cazul în care tutorialul anterior din seria, Fundamentele Android: Programarea sarcinilor recurente, a rămas. Puteți descărca acel cod și lucrați de acolo sau puteți descărca codul pentru acest tutorial și urmați-l. În orice caz, pregătiți-vă prin descărcarea unuia sau a celuilalt proiect și importându-l în Eclipse.
Preferințele comune sunt adesea folosite în întreaga aplicație. Definițiile numelor setărilor individuale și numele grupului de preferințe trebuie să fie stocate pentru a fi utilizate în întreaga aplicație. Există câteva modalități de a rezolva această problemă. Soluția pe care o vom utiliza implică o clasă de ajutor pentru accesul consecvent la valori specifice de setări, cu tastele de preferințe stocate ca șiruri de resurse pentru accesul din cod și alte fișiere de resurse.
Să începem cu codul clasei de ajutor:
clasa publică TutListSharedPrefs public final static String PREFS_NAME = "tutlist_prefs"; static boolean static getBackgroundUpdateFlag (Context context) SharedPreferences prefs = context.getSharedPreferences (PREFS_NAME, 0); returnați prefs.getBoolean (context.getString (R.string.pref_key_flag_background_update), false); void static public setBackgroundUpdateFlag (Context context, boolean newValue) SharedPreferences prefs = context.getSharedPreferences (PREFS_NAME, 0); Editorul prefsEditor = prefs.edit (); prefsEditor.putBoolean (context.getString (R.string.pref_key_flag_background_update), newValue); prefsEditor.commit ();
În această clasă, am definit o constantă publică pentru a identifica numele grupului sau setului de preferințe, numit PREFS_NAME. De asemenea, am folosit un șir de resurse, numit pref_key_flag_background_update, pentru a specifica definiția anumitor nume de preferință. Ar trebui să adăugați un șir la resursele dvs., astfel încât acest identificator să fie definit. Am stabilit valoarea sa la "background_update_flag", dar ceea ce contează este că valoarea folosită este aceeași peste tot.
Deși am adăugat o metodă setBackgroundUpdateFlag () pentru completitudine, nu vom folosi această metodă. Citiți mai departe pentru a vedea de ce.
În sfârșit, am adăugat această clasă Java în pachetul com.mamlambo.tutorial.tutlist.data, care pare a fi cea mai relevantă.
SDK-ul Android include o metodă consistentă de prezentare a setărilor pentru utilizatori: PreferenceActivity. În combinație cu un fișier de resurse de preferință, această clasă de activități specializată face foarte ușor pentru dezvoltatori să configureze și să afișeze cele mai multe tipuri de setări de aplicații în mod consecvent. Coerența cu alte ecrane de aplicații și preferințe de sistem face, de asemenea, aceste ecrane familiarizate și ușor pentru utilizatori.
Pentru a adăuga o PreferenceActivity la "TutList"? aplicație, începeți prin adăugarea unei noi activități de apel TutListPreferencesActivity și lăsați-l să prelungească PreferenceActivity (am adăugat-o în pachetul principal). Deoarece nu folosim numele prestabilit implicit, trebuie să setăm numele de preferință pe care îl va utiliza această PreferenceActivity. În plus, trebuie să-i spunem care fișier de resurse de preferință să fie utilizat. Acest lucru vă va spune cum să afișați preferințele, precum și pe cele pe care acest ecran le afișează și le modifică.
În cadrul metodei onCreate () a acestei activități, utilizați metoda setSharedPreferencesName () cu constanta grupului de preferințe definită în clasa de ajutor pentru preferințe pe care am definit-o în etapa anterioară. Apoi efectuați un apel la metoda addPreferencesFromResource (). Vom defini această resursă în pasul următor.
Chiar acum, întreaga clasă arată astfel:
clasa publică TutListPreferencesActivity extinde PreferenceActivity @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); getPreferenceManager (). setSharedPreferencesName (TutListSharedPrefs.PREFS_NAME); addPreferencesFromResource (R.xml.prefs);
Vom îmbunătăți această clasă pe parcursul tutorialului. Dar, mai întâi, să creăm resursa XML numită prefs.
Adăugați un nou fișier XML numit prefs.xml la resursele aplicației. Puteți utiliza noul vrăjitor XML de fișiere XML și completați câmpurile după cum se arată în imaginea următoare. Acest lucru va crea, de asemenea, fișierul XML în locația corectă, directorul / res / xml.
Un fișier de resurse pentru activități de preferințe este format din: a
Iată întregul fișier de resurse al conținutului preferat al conținutului, prefs.xml:
Acest lucru demonstrează unul dintre cele mai bune motive pentru a stoca șirurile de chei ca o resursă: ele pot fi utilizate direct în fișierul XML, precum și încărcate în Java.
Apoi, vom adăuga un element de meniu din fragmentul listei pentru a lansa ecranul preferințelor. În timp ce facem acest lucru, vom actualiza, de asemenea, elementul din meniul de actualizare pentru a nu mai începe actualizarea programată.
Pentru a face acest lucru, editați mai întâi fișierul de resurse /res/menu/options_menu.xml pentru a adăuga un nou element de meniu:
De asemenea, va trebui să adăugați șirul de resurse corespunzător pentru titlul articolului (@ string / settings) și să adăugați o pictogramă corespunzătoare (@ drawable / ic_menu_preferences). Am folosit pictograma standard de preferințe din SDK-ul Android, care va fi familiarizată utilizatorilor.
Apoi, modificați metoda onCreateOptionsMenu () pentru a furniza intenția corectă pentru noul element de meniu:
Intenție prefsIntent = intent nou (getActivity (), TutListPreferencesActivity.class); MenuItem preferințe = menu.findItem (R.id.settings_option_item); preferences.setIntent (prefsIntent);
Actualizați metoda onOptionsItemSelected (). Deoarece există mai mult de un element de meniu, este acum util să utilizați o declarație de comutare. În cadrul instrucțiunii switch, putem utiliza identificatorii constanți alocați pentru fiecare element de meniu pentru a diferenția selecțiile utilizatorilor.
@Override public boolean onOptionsItemSelected (elementul MenuItem) comutare (item.getItemId ()) caz R.id.refresh_option_item: getActivity () startService (item.getIntent ()); pauză; cazul R.id.settings_option_item: getActivity () startActivity (element.getIntent ()); pauză; return true;
În cele din urmă, nu uitați să adăugați noua activitate în fișierul manifest Android:
Acum puteți rula aplicația și puteți vedea noul element din meniu.
Activitatea de preferințe poate fi lansată și puteți stoca și prelua preferința de actualizare a fundalului. Ar trebui să arate după cum urmează:
Arată grozav, dar încă nu face nimic real. Deși drapelul este actualizat în cadrul preferințelor, nu există încă un loc în care să fie verificată valoarea pentru a vedea dacă actualizarea de fundal ar trebui să înceapă sau nu?
În ultima etapă, au fost eliminate apelurile către metoda helper setRecurringAlarm (). De fapt, această metodă nu va mai fi necesară în clasa TutListFragment. În schimb, mutați-l în clasa TutListPreferencesActivity. Apoi adăugați un al doilea ajutor, numit cancelRecurringAlarm ():
private void cancelRecurringAlarm (context context) Intenter downloader = Intent nou (context, AlarmReceiver.class); PendingIntent recurringDownload = PendingIntent.getBroadcast (context, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarme = (AlarmManager) getSystemService (Context.ALARM_SERVICE); alarms.cancel (recurringDownload);
În cele din urmă, înlocuiți metoda onPause () a clasei TutListPreferencesActivity pentru a seta sau a anula alarma recurentă, după caz. În cadrul acestei metode, puteți verifica valoarea preferințelor - valorile actualizate folosind metoda helper getBackgroundUpdateFlag () și apelați metoda potrivită:
@Override protejat void onPause () super.onPause (); Context context = getApplicationContext (); dacă (TutListSharedPrefs.getBackgroundUpdateFlag (getApplicationContext ())) setRecurringAlarm (context); altceva cancelRecurringAlarm (context);
Acum, ori de câte ori sunt verificate setările, alarma este actualizată pe baza valorii curente. Cu o valoare implicită de "off", utilizatorul trebuie să acceseze setările pentru a permite descărcarea de fundal.
S-ar putea să te fi întrebat de ce nu am folosit noua clasă PreferenceFragment. Motivul este simplu: nu este încă acceptat în biblioteca de compatibilitate. Deoarece dorim să păstrăm aplicația TutList compatibilă cu mai multe dispozitive decât Android 3.0, nu o putem folosi încă. Sperăm că biblioteca de compatibilitate va continua să fie îmbunătățită.
În acest tutorial, ați învățat cum să utilizați fișierul de resurse PreferencesScreen cu o PreferencesActivity pentru a crea rapid și ușor o activitate funcțională care să gestioneze datele preferințelor aplicației. În plus, ați furnizat utilizatorului o metodă de control al actualizării de fundal a aplicației TutList.
Ca întotdeauna, așteptăm cu nerăbdare feedbackul dvs..
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android și Sams Învățați-vă dezvoltarea de aplicații Android în 24 de ore. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin intermediul blogului lor la androidbook.blogspot.com, și pe Twitter @ androidwireless.
я я