android - AppWidget AdapterViewFlipper not working on item click -
i have created simple appwidget adapterviewflipper. displaying data, , flip action working properly, if want handle on item click action, doesn't working. if change adapterviewflipper on listview in xml layout, action click item works properly.
class widget provider
public class kidchildrenadaperviewflipperwidget extends appwidgetprovider { public static final string widget_action = "widget_action"; public static final string action_next = ".action_next"; public static final string action_previous = "action_previous"; private static final string action = "action"; public static final string tag = "kidchildrenlistwidget"; @override public void onreceive(context context, intent intent) { string action = intent.getaction(); bundle extras = intent.getextras(); string actionbutton = (string) (extras == null ? null : extras.get(action)); if (action.equals(kidchildrenadaperviewflipperwidget.widget_action)){ toast.maketext(context, "kliknięto: ", toast.length_short).show(); } if (appwidgetmanager.action_appwidget_update.equals(action) && actionbutton != null) { remoteviews remoteviews = new remoteviews(context.getpackagename(), r.layout.widget_view_flipper_children); switch (actionbutton) { case action_next: { remoteviews.shownext(r.id.advkidwidgetchildren); } break; case action_previous: { remoteviews.showprevious(r.id.advkidwidgetchildren); } break; } int widgetid = extras.getint(appwidgetmanager.extra_appwidget_id, 0); appwidgetmanager.getinstance(context).updateappwidget(widgetid, remoteviews); }else { super.onreceive(context, intent); } } @override public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) { (int = 0; < appwidgetids.length; i++) { intent widgetintent = new intent(context, widgetchildadapterviewflipperservice.class); widgetintent.putextra(appwidgetmanager.extra_appwidget_id, appwidgetids[i]); widgetintent.setdata(uri.parse(widgetintent.touri(intent.uri_intent_scheme))); remoteviews remoteviews = new remoteviews(context.getpackagename(), r.layout.widget_view_flipper_children); remoteviews.setremoteadapter(r.id.advkidwidgetchildren, widgetintent); remoteviews.setemptyview(r.id.advkidwidgetchildren, r.id.tvkidwidgetemptyview); intent activityintent = new intent(context, kidchildrenadaperviewflipperwidget.class); // set action intent. // when user touches particular view, have effect of // broadcasting widget_action. activityintent.setaction(widget_action); activityintent.putextra(appwidgetmanager.extra_appwidget_id, appwidgetids[i]); widgetintent.setdata(uri.parse(widgetintent.touri(intent.uri_intent_scheme))); pendingintent toastpendingintent = pendingintent.getbroadcast(context, 0, activityintent, pendingintent.flag_update_current); remoteviews.setpendingintenttemplate(r.id.advkidwidgetchildren, toastpendingintent); intent previousintent = new intent(context, kidchildrenadaperviewflipperwidget.class); previousintent.setaction(appwidgetmanager.action_appwidget_update); previousintent.putextra(appwidgetmanager.extra_appwidget_id, appwidgetids[i]); previousintent.putextra(action, action_previous); pendingintent previouspendingintent = pendingintent.getbroadcast(context, 1, previousintent, pendingintent.flag_update_current); remoteviews.setonclickpendingintent(r.id.ivwvfcprevious, previouspendingintent); intent nextintent = new intent(context, kidchildrenadaperviewflipperwidget.class); nextintent.setaction(appwidgetmanager.action_appwidget_update); nextintent.putextra(appwidgetmanager.extra_appwidget_id, appwidgetids[i]); nextintent.putextra(action, action_next); pendingintent nextpendingintent = pendingintent.getbroadcast(context, 2, nextintent, pendingintent.flag_update_current); remoteviews.setonclickpendingintent(r.id.ivwvfcnext, nextpendingintent); appwidgetmanager.updateappwidget(appwidgetids[i], remoteviews); } super.onupdate(context, appwidgetmanager, appwidgetids); log.d(tag, "zakutalizowano widget"); } }
class widget service
public class widgetchildadapterviewflipperservice extends remoteviewsservice { @override public remoteviewsfactory ongetviewfactory(intent intent) { return new widgetfactoryadv(this.getapplicationcontext(), intent); } public class widgetfactoryadv implements remoteviewsfactory { private context context; private int appwidgetid; private kiddatabasemanager kiddatabasemanager; private list<childobject> childobjectlist; public widgetfactoryadv(context context, intent intent ) { this.context = context; appwidgetid = intent.getintextra(appwidgetmanager.extra_appwidget_id, appwidgetmanager.invalid_appwidget_id); } @override public void oncreate() { kiddatabasemanager = new kiddatabasemanager(context); childobjectlist = kiddatabasemanager.getchildren(((applicationcontroller) context.getapplicationcontext()).getuser(context).getid()); } @override public void ondatasetchanged() { childobjectlist = kiddatabasemanager.getchildren(((applicationcontroller) context.getapplicationcontext()).getuser(context).getid()); (int i=0; i<childobjectlist.size(); i++){ getviewat(i); } } @override public void ondestroy() { } @override public int getcount() { return childobjectlist.size(); } @override public remoteviews getviewat(int i) { childobject childobject = childobjectlist.get(i); remoteviews widgetrow = new remoteviews(context.getpackagename(), r.layout.widget_children_adv_item); widgetrow.settextviewtext(r.id.tvwidgetitemchildname, childobject.getname()); string sdf = new simpledateformat("yy.mm.dd hh:mm:ss").format(new date(childobject.getpositioncreatedat() * 1000)); widgetrow.settextviewtext(r.id.tvwidgetitemchildpositiontime, html.fromhtml(string.format(getstring(r.string.last_position), sdf))); address address = utils.getaddress(context, childobject.getlatitude(), childobject.getlongitude()); if (address != null) { string thoroughfare = address.getthoroughfare() == null ? "" : address.getthoroughfare(); string localiyty = address.getlocality() == null ? "" : (", " + address.getlocality()); string featurename = address.getfeaturename() == null ? "" : (" " + address.getfeaturename()); widgetrow.settextviewtext(r.id.tvwidgetitemaddress, thoroughfare + featurename + localiyty); } widgetrow.settextviewtext(r.id.tvwidgetitemaccuracy, childutil.getaccuracyindicator(context, childobject.getaccuracy())); childutil.setactivityiconforremoteview(context, widgetrow, childobject.getactivity()); widgetrow.settextviewtext(r.id.tvwidgetitembattery, childobject.getbattery() + " %"); intent widgetintent = new intent(); bundle widgetbundle = new bundle(); widgetbundle.putint("index", i); widgetintent.putextras(widgetbundle); widgetrow.setonclickfillinintent(r.id.rlwidgetadvitem, widgetintent); return widgetrow; } @override public remoteviews getloadingview() { return null; } @override public int getviewtypecount() { return childobjectlist.size(); } @override public long getitemid(int i) { return i; } @override public boolean hasstableids() { return true; } } }
i spent lot of time try solving problem, don't have idea, why not working
thanks suggestion can me problem
Comments
Post a Comment