android - onGetViewFactory not called after onUpdate -
i'm having trouble setting widget app, whenever try add widget home screen onreceive being called , right after onupdate being called - after onupdate finishes - custom remoteviewsservice not called @ all...
noteswidgetprovider.class
public class noteswidgetprovider extends appwidgetprovider { @override public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) { (int appwidgetid : appwidgetids) { remoteviews views = new remoteviews(context.getpackagename(), r.layout.notes_widget); intent intent = new intent(context, noteswidgetservice.class); views.setremoteadapter(r.id.widget_notes, intent); intent clickintent = new intent(context, noteactivity.class); pendingintent clickpendingintenttemplate = taskstackbuilder.create(context) .addnextintentwithparentstack(clickintent) .getpendingintent(0, pendingintent.flag_update_current); views.setonclickpendingintent(r.id.widget_notes, clickpendingintenttemplate); appwidgetmanager.notifyappwidgetviewdatachanged(appwidgetid, r.id.widget_notes); appwidgetmanager.updateappwidget(appwidgetid, views); } } @override public void onreceive(context context, intent intent) { final string action = intent.getaction(); if (action.equals(appwidgetmanager.action_appwidget_update)) { appwidgetmanager mgr = appwidgetmanager.getinstance(context); componentname cn = new componentname(context, noteswidgetprovider.class); mgr.notifyappwidgetviewdatachanged(mgr.getappwidgetids(cn), r.id.widget_notes); } super.onreceive(context, intent); } public static void sendrefreshbroadcast(context context) { intent intent = new intent(appwidgetmanager.action_appwidget_update); intent.setcomponent(new componentname(context, noteswidgetprovider.class)); context.sendbroadcast(intent); } } noteswidgetservice.class
public class noteswidgetservice extends remoteviewsservice { @override public remoteviewsfactory ongetviewfactory(intent intent) { return new notesremoteviewsfactory(this.getapplicationcontext(), intent); } public class notesremoteviewsfactory implements remoteviewsservice.remoteviewsfactory { private context mcontext; private cursor mcursor; public notesremoteviewsfactory(context applicationcontext, intent intent) { mcontext = applicationcontext; } @override public void oncreate() { } @override public void ondatasetchanged() { if (mcursor != null) { mcursor.close(); } final long identitytoken = binder.clearcallingidentity(); uri uri = dbhandler.content_uri; string [] projection = {constants.title_col, constants.content_col, constants.color_col, constants.date_col}; mcursor = mcontext.getcontentresolver().query(uri, projection, null, null, null); binder.restorecallingidentity(identitytoken); } @override public void ondestroy() { if (mcursor != null) { mcursor.close(); } } @override public int getcount() { return mcursor == null ? 0 : mcursor.getcount(); } @override public remoteviews getviewat(int i) { if (i == adapterview.invalid_position || mcursor == null || !mcursor.movetoposition(getcount() - 1 - i)) { return null; } remoteviews rv = new remoteviews(mcontext.getpackagename(), r.layout.widget_item); rv.settextviewtext(r.id.widget_note_title, mcursor.getstring(mcursor.getcolumnindex(constants.title_col))); rv.settextviewtext(r.id.widget_note_content, mcursor.getstring(mcursor.getcolumnindex(constants.content_col))); rv.setint(r.id.widget_note_body, "setbackgroundcolor", color.parsecolor(mcursor.getstring(mcursor.getcolumnindex(constants.color_col)))); intent fillinintent = new intent(); fillinintent.putextra(constants.position_col, getcount() - 1 - i); fillinintent.putextra("code", noteactivity.edit_code); rv.setonclickfillinintent(r.id.widget_note_body, fillinintent); return rv; } @override public remoteviews getloadingview() { return null; } @override public int getviewtypecount() { return 1; } @override public long getitemid(int i) { return mcursor.movetoposition(i) ? mcursor.getlong(0) : i; } @override public boolean hasstableids() { return true; } } } manifest
<receiver android:name=".widget.noteswidgetprovider" android:label="@string/your_notes"> <intent-filter> <action android:name="android.appwidget.action.appwidget_update" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/notes_widget_info" /> </receiver> <service android:name=".widget.noteswidgetservice" android:permission="android.permission.bind_remoteviews" android:exported="false"/> notes_widget_info.xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initiallayout="@layout/notes_widget" android:minheight="180dp" android:minwidth="110dp" android:previewimage="@drawable/example_appwidget_preview" android:resizemode="horizontal|vertical" android:updateperiodmillis="3600000" android:widgetcategory="home_screen"/> what missing? can figure out?
update
i figured out problem used appcompat.imagebutton instead of imagebutton, ongetviewfactory called - when reaching ongetviewfactory widget changes "problem loading widget".
Comments
Post a Comment