android - Refreshing a fragment View on back from settings change -
what i'm trying accomplish have view refresh when comes settings , changes preference. thought work not. ideas on how can accomplish this?
import java.text.simpledateformat; import java.util.calendar; import com.projectcaruso.naturalfamilyplanning.r; import android.annotation.suppresslint; import android.app.datepickerdialog.ondatesetlistener; import android.content.sharedpreferences; import android.os.bundle; import android.preference.preferencemanager; import android.support.v4.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.datepicker; import android.widget.textview; public class chartingfragment extends fragment implements ondatesetlistener { sharedpreferences mpreferences; boolean symptothermal; boolean mucus_stamps; boolean fertile_infertile; @override public void ondateset(datepicker view, int year, int monthofyear, int dayofmonth) { // todo auto-generated method stub } public void showdatepickerdialog(view v) { datepickerfragment newfragment = new datepickerfragment(); newfragment.show(getchildfragmentmanager(), "datepicker"); } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); init(); } private void init() { mpreferences = preferencemanager.getdefaultsharedpreferences(getactivity()); symptothermal = mpreferences.getboolean("symptothermal", true); mucus_stamps = mpreferences.getboolean("mucus_stamps", true); fertile_infertile = mpreferences.getboolean("fertile_infertil", true); } @suppresslint("simpledateformat") @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view; view = setcontrolvisability(inflater); return view; } @override public void onresume() { super.onresume(); view vg = getview().findviewbyid(r.id.charting); vg.invalidate(); init(); } private view setcontrolvisability(layoutinflater inflater) { // todo auto-generated method stub view view = inflater.inflate(r.layout.fragment_charting, null); textview temp; if (!symptothermal) { temp = (textview) view.findviewbyid(r.id.temp); temp.setvisibility(view.gone); temp = (textview) view.findviewbyid(r.id.tempvalue); temp.setvisibility(view.gone); } if (!mucus_stamps) { temp = (textview) view.findviewbyid(r.id.stamp); temp.setvisibility(view.gone); temp = (textview) view.findviewbyid(r.id.stampvalue); temp.setvisibility(view.gone); } if (!fertile_infertile) { temp = (textview) view.findviewbyid(r.id.fertile); temp.setvisibility(view.gone); temp = (textview) view.findviewbyid(r.id.fertileswitch); temp.setvisibility(view.gone); } temp = (textview) view.findviewbyid(r.id.dateselected); simpledateformat dfdate_day= new simpledateformat("mm/dd/yyyy"); string dt=""; calendar c = calendar.getinstance(); dt=dfdate_day.format(c.gettime()); temp.settext(dt); return view; } }
i'd suggest use startactivityforresult , pass bundle if sub-activity (fragmentactivity) has been changed.
1) activity start preference activity:
intent intent = new intent(this, preferenceactivity.class); if (!this.isfinishing()) startactivityforresult(intent, request_update);
2) override onactivityresult
@override protected void onactivityresult(int reqcode, int rescode, intent data) { super.onactivityresult(reqcode, rescode, data); log.d(tag, "received result: " + reqcode + " / " + rescode); }
3) in subactivity (preferenceactivity) monitor keys have been changed , pass bundle if like
public class prefsfragment extends preferencefragment implements onsharedpreferencechangelistener, onpreferencechangelistener { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // load preferences xml resource addpreferencesfromresource(r.xml.preferences); } @override public boolean onpreferencechange(preference arg0, object arg1) { getparent().setresult(mainactivity.result_preferences_changed); // constant } @override public void onresume() { super.onresume(); getpreferencemanager().getsharedpreferences().registeronsharedpreferencechangelistener(this); } @override public void onpause() { getpreferencemanager().getsharedpreferences().unregisteronsharedpreferencechangelistener(this); super.onpause(); } }
Comments
Post a Comment