Question

Ok so every post i find i cannot get this to work, i am trying to inside my list preference

Settingsbasic.xml

<ListPreference
  android:title="themes"
  android:summary="Select the option of the list"
  android:key="listPref"
  android:entries="@array/Themes"
  android:entryValues="@array/list" 
  android:defaultValue="default" />

Now about as you can see above this is my listpreference inside my settingsbasic.xml file. Now what i need to know how to do is i have 2 java files, my main activity. and my preferences java file. I need to know how i can when the user clicks one of the the entries it does something, likes opens something or changes the ui, just something i think i can take it from there. I just need to know how and where the code would go. inside the main acitivty or preference activity.

here is my preference java file

  public class Prefs extends PreferenceActivity {

ListPreference listPref;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settingsbasic);


       }

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

 // Registers a callback to be invoked whenever a user changes a preference.
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

} 

protected void onPause() {
    super.onPause();

 // Unregisters the listener set in onResume().
    // It's best practice to unregister listeners when your app isn't using them to cut down on
    // unnecessary system overhead. You do this in onPause().
    getPreferenceScreen()
            .getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // Sets refreshDisplay to true so that when the user returns to the main
        // activity, the display refreshes to reflect the new settings.
        WebViewClientDemoActivity.????? = true;
    }

 }

Any example code would help, or adding on to my code above. I just need someone whom can shed some light on this code. i've tried so many different things and none of it works.

Ok so using the method of the sample app that was recommended below here is some more code i have .

 Main Activity   

  public class WebViewClientDemoActivity extends Activity {

    public static String sPref = null;

    public void onStart() {
        super.onStart();

     // Gets the user's network preference settings
        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
     // Retrieves a string value for the preferences. The second parameter
        // is the default value to use if a preference value is not found.
        sPref = sharedPrefs.getString("listPref", "Default");

         }
Was it helpful?

Solution

This is the way I used PreferenceActivity:

public class EditPrefs extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.screen_prefs);
    }
}

Then in /res/xml folder I have the XML file:

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

     <ListPreference
        android:key="txtColor"
        android:title="textView Color"
        android:summary="select color for textViews"
        android:entries="@array/txtColor"
        android:entryValues="@array/txtColorValues" />
</PreferenceScreen>

And in /res/values I have this XML file includes items and their values:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="txtColor">
        <item>blue</item>
        <item>brown</item>
        <item>gray</item>
        <item>violet</item>
    </string-array>
    <string-array name="txtColorValues">
        <item>#ff000099</item>
        <item>#5F1E02</item>
        <item>#333333</item>
        <item>#421C52</item>
    </string-array>
</resources>

Then I easily call this class from another android class for instance when user clicks on a menu item:

startActivity(new Intent(this, EditPrefs.class));

You can call the preferences in onCreate and onResume like:

@Override
protected void onResume() {  
    super.onResume();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String txtColor = prefs.getString("txtColor", DEFAULT COLOR); // for instanse : #ff000099 
    textView.setBackgroundColor(Color.parseColor(txtColor));
}

OTHER TIPS

I have resolved my question by this.

Prefs

 public static String theme = "Theme1";

    @Override
    public void onBackPressed() {
      ListPreference listPreference = (ListPreference) findPreference("listPref");
      String currValue = listPreference.getValue();
      theme = currValue;
      super.onBackPressed();

   }

Main Activity

 if (Prefs.theme.equals("Theme1"))
setContentView(R.layout.main);
    else 
       setContentView(R.layout.main2);

Preference XML

 <ListPreference
android:title="themes"
android:summary="Select the option of the list"
android:key="listPref"
android:entries="@array/listReturnValue"
android:entryValues="@array/listDisplayWord" />
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top