PreferenceActivity with custom functionality


SDK Version: 
M3

As we previously desribed in PreferenceActivity Basics a preferences screen with basic features can be done with minimal work, only using XML. Now we will inplement some functionality beyond the base ones, this will require some coding in addition to the XML definition.

We will display the actual value in each preferences summary field, like this:

The base XML will be the same as in the previous example, but we dont need to fill summary fields, they will be filled dinamically.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
  3.         android:title="Settings">
  4.         <EditTextPreference android:title="Name"
  5.                 android:inputType="text"
  6.                 android:key="name" android:persistent="true" android:defaultValue="" />
  7.                
  8.         <EditTextPreference android:title="Password"
  9.                 android:inputType="textPassword"
  10.                 android:key="password" android:persistent="true" android:defaultValue="" />
  11.  
  12.         <CheckBoxPreference android:title="Auto login"
  13.          android:key="autostart" android:defaultValue="true" />
  14. </PreferenceScreen>

First when the Activity is created, we must dinamically set the summary fields starting value, like this:

Second, we must set a listener on each preference change, to update the value when it changes.
For this, the PreferenceActivity class will implement OnSharedPreferenceChangeListener and we will register the listener in onResume() and unregister it in onPause() and handle the changes in the onSharedPreferenceChangedlistener() method.

We take different actions depending on field type. For example we can not directly output the value of a checkbox, and we dont want to display passwords.

  1. public class Settings extends PreferenceActivity implements
  2. OnSharedPreferenceChangeListener {
  3.   @Override
  4.   protected void onCreate(Bundle savedInstanceState) {
  5.     super.onCreate(savedInstanceState);
  6.     PreferenceManager.setDefaultValues(this, R.xml.settings, false);
  7.     addPreferencesFromResource(R.xml.settings);
  8.  
  9.     SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
  10.  
  11.     Preference name = (Preference) findPreference("name");
  12.     name.setSummary(sp.getString("name", ""));
  13.  
  14.     Preference password = (Preference) findPreference("password");
  15.     password.setSummary(sp.getString("password", "").replaceAll(".","*"));
  16.            
  17.     CheckBoxPreference autostart = (CheckBoxPreference) findPreference("autostart");
  18.     if(autostart.isChecked())
  19.       autostart.setSummary("On");
  20.     else
  21.       autostart.setSummary("Off");
  22.   }
  23.  
  24.   @Override
  25.   protected void onPause() {
  26.     getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
  27.     finish();
  28.     super.onPause();
  29.   }
  30.  
  31.   protected void onResume() {
  32.     super.onResume();
  33.     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
  34.   }
  35.  
  36.   public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
  37.     Preference pref = findPreference(key);
  38.     if (pref instanceof EditTextPreference) {
  39.       EditTextPreference etp = (EditTextPreference) pref;
  40.       if(pref.getKey().equals("password")){
  41.         pref.setSummary(etp.getText().replaceAll(".","*"));
  42.       }else{
  43.          pref.setSummary(etp.getText());
  44.       }
  45.     }else if(pref instanceof CheckBoxPreference){
  46.       if(((CheckBoxPreference)pref).isChecked())
  47.       pref.setSummary("On");
  48.     else
  49.       pref.setSummary("Off");
  50.     }
  51.   }
  52. }

Comments

Add hints to preference screen
android:hint="Enter Name"
android:hint="Enter Password"

Add strings to string.xml file
prefscreen_default_name with value Set your login name here
prefscreen_default_password with value Set your password here

public class Settings extends PreferenceActivity implements OnSharedPreferenceChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PreferenceManager.setDefaultValues(this, R.xml.preferencescreen, false);
addPreferencesFromResource(R.xml.preferencescreen);

// Instance
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
// Sets The Actual Entered Value or Default Defined string resource
// for android:summary in the res/xml/preferencescreen layout.
// Note: android:summary="..." is not defined in screen layout!

// findPreference("name") - references the android:key="name" in xml
Preference name = (Preference) findPreference("name");
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_name);
// Get current preference settings value
String sValue = sp.getString("name", "");

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default
name.setSummary( smyDefault );
}
else
{
// Set Actual Value
name.setSummary(sp.getString("name", ""));
}

// Password
Preference password = (Preference) findPreference("password");
// Layout is defined in xml/preferencescreen.xml
// android:defaultValue="Set your password here"
// Get Default from resource file strings.xml
smyDefault = getResources().getString(R.string.prefscreen_default_password);
// Get current preference settings value
sValue = sp.getString("password", "");

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default - Do not hide value with Asterisks "*"
// You need to be able to read this default text
password.setSummary( smyDefault );
}
else
{
// Replace found password value with Asterisks "*"
password.setSummary(sp.getString("password", "").replaceAll(".","*"));
}

// Get current checkbox preference settings value
CheckBoxPreference autostart = (CheckBoxPreference) findPreference("autostart");
if(autostart.isChecked())
{
autostart.setSummary("On");
}
else
{
autostart.setSummary("Off");
}
}

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

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

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
Preference pref = findPreference(key);
// EditTextPreference(s)
if (pref instanceof EditTextPreference)
{
EditTextPreference etp = (EditTextPreference) pref;

// Name
if(pref.getKey().equals("name"))
{
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_name);
// Get current preference settings value
String sValue = etp.getText();

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default Value
pref.setSummary( smyDefault );
}
else
{
// Show current preference settings value
pref.setSummary(etp.getText());
}

}

// Password
if(pref.getKey().equals("password"))
{
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_password);
// Get current preference settings value
String sValue = etp.getText();

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default Value - Do not hide with password "*"
pref.setSummary( smyDefault );
}
else
{
// Show current preference settings value
// Hide password value with Asterisks "*"
pref.setSummary(etp.getText().replaceAll(".","*"));
}

}

}

// CheckBoxPreference(s)
if(pref instanceof CheckBoxPreference)
{
if(((CheckBoxPreference)pref).isChecked())
{
pref.setSummary("On");
}
else
{
pref.setSummary("Off");
}

}

}

}

End --
a b c d e f g h i j

=========================================================

ipad bag blog
Sutudeg Community
Education News

=========================================================

a visit b visit c visit d visit e visit f visit g visit h visit i visit j visit k visit l visit m visit n visit o visit p visit q visit r visit s visit t visit u visit v visit w visit x visit y visit z visit aa visit ab visit ac visit ad visit ae visit af visit ag visit ah visit ai visit aj visit ak visit al visit am visit an visit ao visit ap visit aq visit ar visit as visit at visit au visit av visit aw visit ax visit ay visit az visit ba visit bb visit bc visit bd visit be visit bf visit bg visit bh visit bi visit bk visit bl visit bm visit bn visit bo visit bp visit bq visit br visit bs visit bt visit bu visit bv visit bw visit bx visit by visit bz visit ca visit cb visit cc visit cd visit ce visit cf visit cg visit ch ci cj ck cl ccl cm cn co cp cq cr cs ct cu cv

=========================================================

العاب توم وجيري

العاب بنات

العاب طبخ

العاب سيارات

العاب تلبيس

العاب دراجات

العاب قص الشعر

العاب حرب

العاب سبونج بوب

العاب اطفال

العاب اكشن

العاب بلياردو

العاب باربي

العاب ماريو

العاب كرة القدم

العاب سونيك

العاب بن تن

العاب توم وجيري

العاب فلة

العاب كراش

العاب بنات

العاب باربي

العاب بنات

العاب لولو كاتي

العاب تلبيس

العاب تلوين

العاب ديكور

العاب قص الشعر

العاب طبخ

العاب دوار

العاب براتز

العاب هانا مونتانا

العاب ديزني

اخريطة ي

اخريطة ي

اخريطة ي

العاب اطفال

العاب سيارات اطفال

العاب بنات اطفال

العاب دراجات اطفال

العاب سبونج بوب اطفال

العاب باربي اطفال

العاب تلبيس اطفال

االعاب قص الشعر اطفال

العاب طبخ اطفال

العاب دورا اطفال

العاب ماريو اطفال

العاب سكوبي دو اطفال

العاب

العاب بنات

العاب طبخ

العاب سيارات

العاب تلبيس

العاب دراجات

العاب قص الشعر

العاب حرب

العاب سبونج بوب

العاب اطفال

العاب اكشن

العاب بلياردو

العاب باربي

العاب ماريو

العاب داني الشبح

العاب سونيك

العاب دورا

العاب تلوين

العاب ديكور

العاب بن تن

العاب كرة القدم

العاب مكياج

العاب رياضية

العاب ذكاء

العاب سكوبي دو

دليل رمث

العاب

العاب طبخ

العاب سيارات

العاب قص الشعر

العاب تلبيس

العاب سبونج بوب

العاب سكوبي دو

العاب دراجات

العاب دورا

العاب بنات

العاب حرب

توبيكات

منتديات

دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
دردشة كويتية
كويتية
كويتية
كويتية
كويتية
كويتية
كويتية
كويتية
شات
شات
شات
شات
شات
شات
شات
شات
شات
شات
شات
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقيه
اغاني عراقيه
اغاني عراقيه
اغاني عراقيه
اغاني عراقيه
اغاني عراقيه
اغاني عراقيه
دردشة عراقية
دردشة عراقية
دردشة عراقية
دردشة عراقية
عراق
عراق
منتديات عراقية
iraqi songs
iraqi songs
iraqi songs
iraqi songs
iraqi songs
اغاني
اغاني
اغاني
اغاني mp3
اغاني mp3
اغاني
اغاني
اغاني
اغاني
اغاني
جات عراقي
جات عراقي
جات عراقي
جات عراقي
جات عراقي
جات عراقي
شات عراقي
شات عراقي
شات عراقي
شات عراقي
شات عراقي
غزلان
اسراء الاصيل
نصرت البدر
حسام الرسام
جي فاير
كاظم الساهر
محمد السالم
فضائح المشاهير
تحميل الاغاني العراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني عراقية
اغاني mp3
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
دردشة عراقنا
عراقنا
شات عراقنا
موقع عراقنا
جات عراقنا
شات العراقا
صبايا العراق
دردشة عراقية
دردشة عراقية
دردشة عراقية
دردشة عراقية
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة صبايا العراق
دردشة العاشقدردشة العاشقجات كردي
دردشة بغداد
جات بغداد
دردشة الانبار
دردشة البصرة
دردشة الموصل
دردشة الحلة بابل
دردشة ديالى بعقوبة
دردشة ميسان العمارة
دردشة الناصرية
دردشة اربيل هولير
دردشة دهوك
دردشة تكريت صلاح الدين
دردشة السماوة
دردشة النجف
دردشة كربلاء
دردشة كركوك
الدردشات العراقية
دردشة ذي قار

It was really interesting.

Add hints to preference screen
android:hint="Enter Name"
android:hint="Enter Password"

Add strings to string.xml file
prefscreen_default_name with value Set your login name here
prefscreen_default_password with value Set your password here

public class Settings extends PreferenceActivity implements OnSharedPreferenceChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PreferenceManager.setDefaultValues(this, R.xml.preferencescreen, false);
addPreferencesFromResource(R.xml.preferencescreen);

// Instance
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
// Sets The Actual Entered Value or Default Defined string resource
// for android:summary in the res/xml/preferencescreen layout.
// Note: android:summary="..." is not defined in screen layout!

// findPreference("name") - references the android:key="name" in xml
Preference name = (Preference) findPreference("name");
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_name);
// Get current preference settings value
String sValue = sp.getString("name", "");

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default
name.setSummary( smyDefault );
}
else
{
// Set Actual Value
name.setSummary(sp.getString("name", ""));
}

// Password
Preference password = (Preference) findPreference("password");
// Layout is defined in xml/preferencescreen.xml
// android:defaultValue="Set your password here"
// Get Default from resource file strings.xml
smyDefault = getResources().getString(R.string.prefscreen_default_password);
// Get current preference settings value
sValue = sp.getString("password", "");

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default - Do not hide value with Asterisks "*"
// You need to be able to read this default text
password.setSummary( smyDefault );
}
else
{
// Replace found password value with Asterisks "*"
password.setSummary(sp.getString("password", "").replaceAll(".","*"));
}

// Get current checkbox preference settings value
CheckBoxPreference autostart = (CheckBoxPreference) findPreference("autostart");
if(autostart.isChecked())
{
autostart.setSummary("On");
}
else
{
autostart.setSummary("Off");
}
}

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

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

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
Preference pref = findPreference(key);
// EditTextPreference(s)
if (pref instanceof EditTextPreference)
{
EditTextPreference etp = (EditTextPreference) pref;

// Name
if(pref.getKey().equals("name"))
{
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_name);
// Get current preference settings value
String sValue = etp.getText();

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default Value
pref.setSummary( smyDefault );
}
else
{
// Show current preference settings value
pref.setSummary(etp.getText());
}

}

// Password
if(pref.getKey().equals("password"))
{
// Get Default from resource file strings.xml
String smyDefault = getResources().getString(R.string.prefscreen_default_password);
// Get current preference settings value
String sValue = etp.getText();

if( sValue.equalsIgnoreCase( smyDefault ) || sValue.length() == 0 )
{
// Show Default Value - Do not hide with password "*"
pref.setSummary( smyDefault );
}
else
{
// Show current preference settings value
// Hide password value with Asterisks "*"
pref.setSummary(etp.getText().replaceAll(".","*"));
}

}

}

// CheckBoxPreference(s)
if(pref instanceof CheckBoxPreference)
{
if(((CheckBoxPreference)pref).isChecked())
{
pref.setSummary("On");
}
else
{
pref.setSummary("Off");
}

}

}

}

End --

Thank you for writing this article, many people should read it and learn from it.I like how you explained the steps
by
web agency toscana

nice article...
by
sarang semut

Nice piece of coding here and I think this will help my friend on a project he is working on. Im trying to learn at the moment although its going quite slowly but thanks for an interesting post.

bailey button triplet boots

Andriod system that's really the mobile phone, I asenath zhuo system, the sense is good.

This is the first time I am visiting your site and happy to read this post. This site gives the light in which we can observe the reality and it is very useful one and gives in depth information. thanks for this sharing this article.

I must say that overall I am really impressed with this blog.It is easy to see that you are impassioned about your writing. I wish I had got your ability to write. I look forward to more updates and will be returning.

joomla developers

Another important and well Presenting article. Good facts and viewpoints. You do a great job, and your blog IS one of my favorites.
Buy Medicine http://www.mycarepharmacy.com

I have read a few good stuff here. Certainly worth bookmarking for revisiting. I wonder how much effort you put to create such a fantastic nike free run , nike free run shoes, nike run free shoes also!

I have read a few good stuff here. Certainly worth bookmarking for revisiting. I wonder how much effort you put to create such a fantastic nike free run shoes!

Nice piece of coding here and I think this will help my friend on a project he is working on. Im trying to learn at the moment although its going quite slowly but thanks for an interesting post.

CD Duplication Scotland

certainly thank you very Jocuri Online much for this post I'm working with it and helped memario games mario games

I hope that this new function will be largely appreciated and used in near future by Android users
BenTen Oyunları - Zeka Oyunları - Komik Oyunlar - Oyunlar- Araba Yarışı Oyunları

I am certainly thankful to you for providing us with this invaluable info. My spouse and I are truthfully grateful, Discount Sunglasses دردشة لمسة حب ,
نتائج الثانوية العامة اليمنالوهممنتديات دلتا سوفت

Thanks, very interesting post.
See ya

Siege ergonomique

Really great post. Android will be the best OS competing with iOS.

weird news
funny technology

games update

I am certainly thankful to you for providing us with this invaluable info. My spouse and I are truthfully grateful, Discount Sunglasses

love the custom functionality!

reverse telephone search

I am certainly thankful to you for providing us with this invaluable info. My spouse and I are truthfully grateful, Discount Sunglasses Discount Sunglasses

I am certainly thankful to you for providing us with this invaluable info. My spouse and I are truthfully grateful, ray ban sunglasses is a perfect temperament to show you the beautiful moments from the ray ban sunglasses start,how can they resist the temptation!

Discount Sunglasses shop for ray ban sunglasses are the largest wholesale ray ban sunglasses retail and wholesale business,the mall offers wayfarer ray ban sunglasses,cheap ray ban sunglasses,discount ray ban sunglasses ,we will provide the best service and best quality products,full service,with your shopping trip!

I am certainly thankful to you for providing us with this invaluable info. My spouse and I are truthfully grateful,

I didn't know that about different actions for different field types...

----

Affiliate tools and resources
Home parties
Reverse number information

This is just wonderful and pleasing to know this new custom functionality and I love to have such applications. I hope that this new function will be largely appreciated and used in near future by Android users.

UK Wholesale Directory

Thanks for this useful post

------------
Rina As : Sitemap