I need to get value from PreferenceFragment to SplashActivity. How can i do it?
public class SettingsFragment extends PreferenceFragment {
public String cityToLoad;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
ListPreference city = (ListPreference) findPreference("city");
city.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
#Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
cityToLoad = newValue.toString();
return true;
}
});
}}
my preferences.xml contains only ListPreference.
You don't have onchange event in list preference. For More http://developer.android.com/reference/android/preference/PreferenceFragment.html
And if you are just using preference tag then you can try below code.
city.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
#Override
public boolean onPreferenceClick(Preference arg0) {
Intent newScreen = new Intent(getActivity(), SecondActivity.class);
newScreen.putExtra("Data", data);
startActivity(newScreen);
return true;
}
});
Related
I need to change Check Box Preference inside the Preference activity, but it not seems to work:
public class SettingsActivity extends PreferenceActivity {
static CheckBoxPreference autoP;
#Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener{
#Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
autoP = (CheckBoxPreference)findPreference("autoP");
autoP.setOnPreferenceChangeListener(autoP_listener);
OnPreferenceChangeListener autoP_listener = new OnPreferenceChangeListener() {
#Override
public boolean onPreferenceChange(Preference preference,Object newValue) {
autoP.setDefaultValue((String) newValue);
if (newValue.toString().equals("true"))
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
else
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
return false;
}
};
}
}
This should work:
final CheckBoxPreference autoP = (CheckBoxPreference) getPreferenceManager().findPreference("autoP");
autoP.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((Boolean)newValue == true) {
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}else {
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
return true;
}
});
try this:
public class SettingsActivity extends PreferenceActivity {
static CheckBoxPreference autoP;
#Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
#Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
autoP = (CheckBoxPreference)findPreference("autoP");
autoP.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
#Override
public boolean onPreferenceChange(Preference preference,Object newValue) {
updateOnPreferenceChange();
}
});
}
private void updateOnPreferenceChange() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
String pref_name = "should_be_pref_name_in_xml_file";
boolean checked = sharedPreferences.getBoolean(pref_name, defaultValue);
if (checked) {
// todo
} else {
// todo
}
}
}
}
Try this
public class SettingsActivity extends PreferenceFragment {
#Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
#Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
String key = preference.getKey();
if (key.equals("key")) {
if (((CheckBoxPreference) preference).isChecked()){
// do things if the checkbox is checked
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
// do things if it is unchecked
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
return true;
}
}
I have an Activity named MyActivity. MyActivity uses WebView to show web pages.
I also have an options activity like below. O also have /res/xml/options.xml
When user changes something in the options, I run MyUtility.setOptionsChanged() method.
My problem is when user changes something in preferences XML. When user presses back button I need to reload the current webview URL with post data ?
Can you check the code below and where should I put that logic ? Should I add to MyOptionsActivity's onKeyDown method or ?
public class MyActivity extends Activity {
#Override
public void onCreate(Bundle savedInstanceState) {
mContext = getApplicationContext();
super.onCreate(savedInstanceState);
setContentView(R.layout.myweb);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebViewClient(new myWebViewClient());
String postData = MyUtility.getOptionsDataForPOSTURL(mContext);
mWebView.postUrl("http://example.com", EncodingUtils.getBytes(postData, "BASE64"));
}
public class myWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String postData = MyUtility.getOptionsDataForPOSTURL(mContext);
view.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
public class MyOptionsActivity extends PreferenceActivity
implements SharedPreferences.OnSharedPreferenceChangeListener {
Context mContext;
#Override
public void onCreate(Bundle savedInstanceState) {
mContext = getApplicationContext();
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("myoptions");
addPreferencesFromResource(R.xml.options);
}
#Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
#Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
#Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
MyUtility.setOptionsChanged(mContext,true);
}
}
public class MyUtility {
public static void setOptionsChanged(Context pContext, Boolean pOptionsChanged) {
SharedPreferences prefs = pContext.getSharedPreferences("general", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("optionsChanged", pOptionsChanged);
editor.commit();
}
}
Regarding to #Hiren Dabhi's comment, best place is Activity's onRestart method. It worked good.
I'm attempting to evaluate my preferences in my java code in order to enable/disable other options it they chose not to do other options... So far i'm trying to only implement the OnPreferenceClickListener however i never see the toast from the changes. What am i doing wrong? There seem to be alot of other questions like this but i cannot see my error in reference to them.
public class UserSettingActivity extends PreferenceActivity implements OnPreferenceClickListener{
SharedPreferences mPreferences;
Boolean frequency;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
#Override
public boolean onPreferenceClick(Preference preference) {
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
frequency = mPreferences.getBoolean("frequency", true);
Context context = getApplicationContext();
Toast.makeText(context, "Hello toast 0!", Toast.LENGTH_LONG).show();
if (!frequency) {
Context context2 = getApplicationContext();
Toast.makeText(context2, "Hello toast 1!", Toast.LENGTH_LONG).show();
} else if (preference.getKey().equals("schedulestop")) {
} else if (preference.getKey().equals("priority")) {
} else {
Context context3 = getApplicationContext();
Toast.makeText(context3, "Hello toast 0!", Toast.LENGTH_LONG).show();
}
return false;
}
}
You have to register for PreferenceClickListener each individual preference
somePreference.setOnPreferenceClickListener(this);
or you can use getSharedPreferences().registerOnSharedPreferenceChangeListener for all preferences.
public class UserSettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
SharedPreferences mPreferences;
Boolean frequency;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
#SuppressWarnings("deprecation")
#Override
protected void onPause()
{
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
#SuppressWarnings("deprecation")
#Override
protected void onResume()
{
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
#SuppressWarnings("deprecation")
#Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("schedulestop")) {
// do something
}
else if (key.equals(......
}
}
first implement "OnSharedPreferenceChangeListener"
PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener
Then
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
settings.registerOnSharedPreferenceChangeListener(this);
}
THEN
#Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
switch (key) {
case "pref_key_auto_delete":
boolean notificationStatus = SP.getBoolean(key, false);
Log.d("stat", String.valueOf(notificationStatus));
break;
case "pref_key_notification_list":
String downloadType = SP.getString(key, "n/a");
Log.d("stat", String.valueOf(downloadType));
break;
}
I have a Preferences Activity in my code.
I want to show a toast when ever user change radio button in a ListPreferences.
I used this code but it does not work. :(
public class PrefsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
public void onSharedPreferenceChanged(SharedPreferences arg0, String key) {
ListPreference listPreference = (ListPreference) findPreference(key);
listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
#Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
Toast.makeText(PrefsActivity.this, "second", Toast.LENGTH_LONG).show();
return false;
}
});
}
}
what is my problem?
Change your onCreate code to:
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
}
You are not adding the registerOnSharedPreferenceChangeListener to PrefsActivity Activity.
I have made edit preference but I am not getting onchangelistener when clicking on ok button as I use the ondismiss listener but when comment that code I get onchange listener but after uncommenting it I am not getting onchangelistener.
public class Preferences extends PreferenceActivity{
SharedPreferences sharedPreferences=null;
String text=null;
String negativeBtnTxt=null;
private EditTextPreference editTextPreference=null;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_layout);
sharedPreferences=PreferenceManager.getDefaultSharedPreferences(getBaseContext());
Preference preference=(Preference)findPreference("customPref");
editTextPreference=(EditTextPreference)findPreference("editTextPref");
editTextPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
#Override
public boolean onPreferenceClick(Preference preference) {
Log.v("in Preferences","edit text pref onclick");
dialogActivated();
return false;
}
});
editTextPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
#Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.v("in Preferences","edit text pref changed");
return false;
}
});
Log.v("edit text dialog=","---"+editTextPreference.getDialog());
Log.v("ET value is=",""+sharedPreferences.getString("editTextPref", "Hello!!!"));
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
#Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getApplicationContext(), "Clicked on preference", 3).show();
Log.v("in Preferences","");
return false;
}
});
}
private void dialogActivated()
{
if(editTextPreference.getDialog()!=null)
{
editTextPreference.getDialog().setCancelable(true);
editTextPreference.getDialog().setOnCancelListener(new OnCancelListener() {
#Override
public void onCancel(DialogInterface dialog) {
Log.v("in Preferences","back key cancel");
}
});
editTextPreference.getDialog().setOnDismissListener(new OnDismissListener() {
#Override
public void onDismiss(DialogInterface dialog) {
Log.v("in Preferences","dismis called");
editTextPreference.getNegativeButtonText();
}
});
}
}
}