android pull to refresh listview -



android pull to refresh listview -

i retrieve info server , populate them listview. want implement pull refresh in listview there's error app. utilize library written other people pull refresh function.

here's code :

public class mainactivity extends activity { listview list; textview ver; textview name; textview api; button btngetdata; arraylist<hashmap<string, string>> oslist = new arraylist<hashmap<string, string>>(); //url json array private static string url = "http://api.learn2crack.com/android/jsonos/"; //json node names private static final string tag_os = "android"; private static final string tag_ver = "ver"; private static final string tag_name = "name"; private static final string tag_api = "api"; jsonarray android = null; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); oslist = new arraylist<hashmap<string, string>>(); ((pulltorefreshlistview)list).setonrefreshlistener(new onrefreshlistener() { public void onrefresh() { // work refresh list here. new jsonparse().execute(); } }); btngetdata = (button)findviewbyid(r.id.getdata); btngetdata.setonclicklistener(new view.onclicklistener() { //@override public void onclick(view view) { new jsonparse().execute(); } }); } private class jsonparse extends asynctask<string, string, jsonobject> { private progressdialog pdialog; @override protected void onpreexecute() { super.onpreexecute(); ver = (textview)findviewbyid(r.id.vers); name = (textview)findviewbyid(r.id.name); api = (textview)findviewbyid(r.id.api); pdialog = new progressdialog(mainactivity.this); pdialog.setmessage("getting info ..."); pdialog.setindeterminate(false); pdialog.setcancelable(true); pdialog.show(); } @override protected jsonobject doinbackground(string... args) { jsonparser jparser = new jsonparser(); // getting json url jsonobject json = jparser.getjsonfromurl(url); /* seek { thread.sleep(2000); } grab (interruptedexception e) { ; }*/ homecoming json; } @override protected void onpostexecute(jsonobject json) { pdialog.dismiss(); ((pulltorefreshlistview) list).onrefreshcomplete(); seek { // getting json array url android = json.getjsonarray(tag_os); for(int = 0; < android.length(); i++){ jsonobject c = android.getjsonobject(i); // storing json item in variable string ver = c.getstring(tag_ver); string name = c.getstring(tag_name); string api = c.getstring(tag_api); // adding value hashmap key => value hashmap<string, string> map = new hashmap<string, string>(); map.put(tag_ver, ver); map.put(tag_name, name); map.put(tag_api, api); oslist.add(map); list=(listview)findviewbyid(r.id.list); listadapter adapter = new simpleadapter(mainactivity.this, oslist, r.layout.list_v, new string[] { tag_ver,tag_name, tag_api }, new int[] { r.id.vers,r.id.name, r.id.api}); list.setadapter(adapter); list.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // toast.maketext(mainactivity.this, "you clicked @ "+oslist.get(+position).get("name"), toast.length_short).show(); string namee = oslist.get(position).get("name"); intent intent = new intent(mainactivity.this, new.class); intent.putextra("key", namee); startactivity(intent); } }); } } grab (jsonexception e) { e.printstacktrace(); } } } }

here's pull refresh code:

public class pulltorefreshlistview extends listview implements onscrolllistener { private static final int tap_to_refresh = 1; private static final int pull_to_refresh = 2; private static final int release_to_refresh = 3; private static final int refreshing = 4; private static final string tag = "pulltorefreshlistview"; private onrefreshlistener monrefreshlistener; /** * listener receive notifications every time list scrolls. */ private onscrolllistener monscrolllistener; private layoutinflater minflater; private relativelayout mrefreshview; private textview mrefreshviewtext; private imageview mrefreshviewimage; private progressbar mrefreshviewprogress; private textview mrefreshviewlastupdated; private int mcurrentscrollstate; private int mrefreshstate; private rotateanimation mflipanimation; private rotateanimation mreverseflipanimation; private int mrefreshviewheight; private int mrefreshoriginaltoppadding; private int mlastmotiony; private boolean mbouncehack; public pulltorefreshlistview(context context) { super(context); init(context); } public pulltorefreshlistview(context context, attributeset attrs) { super(context, attrs); init(context); } public pulltorefreshlistview(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); init(context); } private void init(context context) { // load of animations need in code rather through xml mflipanimation = new rotateanimation(0, -180, rotateanimation.relative_to_self, 0.5f, rotateanimation.relative_to_self, 0.5f); mflipanimation.setinterpolator(new linearinterpolator()); mflipanimation.setduration(250); mflipanimation.setfillafter(true); mreverseflipanimation = new rotateanimation(-180, 0, rotateanimation.relative_to_self, 0.5f, rotateanimation.relative_to_self, 0.5f); mreverseflipanimation.setinterpolator(new linearinterpolator()); mreverseflipanimation.setduration(250); mreverseflipanimation.setfillafter(true); minflater = (layoutinflater) context.getsystemservice( context.layout_inflater_service); mrefreshview = (relativelayout) minflater.inflate( r.layout.pull_to_refresh_header, this, false); mrefreshviewtext = (textview) mrefreshview.findviewbyid(r.id.pull_to_refresh_text); mrefreshviewimage = (imageview) mrefreshview.findviewbyid(r.id.pull_to_refresh_image); mrefreshviewprogress = (progressbar) mrefreshview.findviewbyid(r.id.pull_to_refresh_progress); mrefreshviewlastupdated = (textview) mrefreshview.findviewbyid(r.id.pull_to_refresh_updated_at); mrefreshviewimage.setminimumheight(50); mrefreshview.setonclicklistener(new onclickrefreshlistener()); mrefreshoriginaltoppadding = mrefreshview.getpaddingtop(); mrefreshstate = tap_to_refresh; addheaderview(mrefreshview); super.setonscrolllistener(this); measureview(mrefreshview); mrefreshviewheight = mrefreshview.getmeasuredheight(); } @override protected void onattachedtowindow() { super.onattachedtowindow(); setselection(1); } @override public void setadapter(listadapter adapter) { super.setadapter(adapter); setselection(1); } /** * set listener receive notifications every time list * scrolls. * * @param l scroll listener. */ @override public void setonscrolllistener(abslistview.onscrolllistener l) { monscrolllistener = l; } /** * register callback invoked when list should refreshed. * * @param onrefreshlistener callback run. */ public void setonrefreshlistener(onrefreshlistener onrefreshlistener) { monrefreshlistener = onrefreshlistener; } /** * set text represent when list lastly updated. * @param lastupdated lastly updated at. */ public void setlastupdated(charsequence lastupdated) { if (lastupdated != null) { mrefreshviewlastupdated.setvisibility(view.visible); mrefreshviewlastupdated.settext(lastupdated); } else { mrefreshviewlastupdated.setvisibility(view.gone); } } @override public boolean ontouchevent(motionevent event) { final int y = (int) event.gety(); mbouncehack = false; switch (event.getaction()) { case motionevent.action_up: if (!isverticalscrollbarenabled()) { setverticalscrollbarenabled(true); } if (getfirstvisibleposition() == 0 && mrefreshstate != refreshing) { if ((mrefreshview.getbottom() >= mrefreshviewheight || mrefreshview.gettop() >= 0) && mrefreshstate == release_to_refresh) { // initiate refresh mrefreshstate = refreshing; prepareforrefresh(); onrefresh(); } else if (mrefreshview.getbottom() < mrefreshviewheight || mrefreshview.gettop() <= 0) { // abort refresh , scroll downwards below refresh view resetheader(); setselection(1); } } break; case motionevent.action_down: mlastmotiony = y; break; case motionevent.action_move: applyheaderpadding(event); break; } homecoming super.ontouchevent(event); } private void applyheaderpadding(motionevent ev) { // gethistorysize has been available since api 1 int pointercount = ev.gethistorysize(); (int p = 0; p < pointercount; p++) { if (mrefreshstate == release_to_refresh) { if (isverticalfadingedgeenabled()) { setverticalscrollbarenabled(false); } int historicaly = (int) ev.gethistoricaly(p); // calculate padding apply, split 1.7 // simulate more resistant effect during pull. int toppadding = (int) (((historicaly - mlastmotiony) - mrefreshviewheight) / 1.7); mrefreshview.setpadding( mrefreshview.getpaddingleft(), toppadding, mrefreshview.getpaddingright(), mrefreshview.getpaddingbottom()); } } } /** * sets header padding original size. */ private void resetheaderpadding() { mrefreshview.setpadding( mrefreshview.getpaddingleft(), mrefreshoriginaltoppadding, mrefreshview.getpaddingright(), mrefreshview.getpaddingbottom()); } /** * resets header original state. */ private void resetheader() { if (mrefreshstate != tap_to_refresh) { mrefreshstate = tap_to_refresh; resetheaderpadding(); // set refresh view text pull label mrefreshviewtext.settext(r.string.pull_to_refresh_tap_label); // replace refresh drawable arrow drawable mrefreshviewimage.setimageresource(r.drawable.ic_pulltorefresh_arrow); // clear total rotation animation mrefreshviewimage.clearanimation(); // hide progress bar , arrow. mrefreshviewimage.setvisibility(view.gone); mrefreshviewprogress.setvisibility(view.gone); } } private void measureview(view child) { viewgroup.layoutparams p = child.getlayoutparams(); if (p == null) { p = new viewgroup.layoutparams( viewgroup.layoutparams.fill_parent, viewgroup.layoutparams.wrap_content); } int childwidthspec = viewgroup.getchildmeasurespec(0, 0 + 0, p.width); int lpheight = p.height; int childheightspec; if (lpheight > 0) { childheightspec = measurespec.makemeasurespec(lpheight, measurespec.exactly); } else { childheightspec = measurespec.makemeasurespec(0, measurespec.unspecified); } child.measure(childwidthspec, childheightspec); } @override public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) { // when refresh view visible, alter text // "release refresh..." , flip arrow drawable. if (mcurrentscrollstate == scroll_state_touch_scroll && mrefreshstate != refreshing) { if (firstvisibleitem == 0) { mrefreshviewimage.setvisibility(view.visible); if ((mrefreshview.getbottom() >= mrefreshviewheight + 20 || mrefreshview.gettop() >= 0) && mrefreshstate != release_to_refresh) { mrefreshviewtext.settext(r.string.pull_to_refresh_release_label); mrefreshviewimage.clearanimation(); mrefreshviewimage.startanimation(mflipanimation); mrefreshstate = release_to_refresh; } else if (mrefreshview.getbottom() < mrefreshviewheight + 20 && mrefreshstate != pull_to_refresh) { mrefreshviewtext.settext(r.string.pull_to_refresh_pull_label); if (mrefreshstate != tap_to_refresh) { mrefreshviewimage.clearanimation(); mrefreshviewimage.startanimation(mreverseflipanimation); } mrefreshstate = pull_to_refresh; } } else { mrefreshviewimage.setvisibility(view.gone); resetheader(); } } else if (mcurrentscrollstate == scroll_state_fling && firstvisibleitem == 0 && mrefreshstate != refreshing) { setselection(1); mbouncehack = true; } else if (mbouncehack && mcurrentscrollstate == scroll_state_fling) { setselection(1); } if (monscrolllistener != null) { monscrolllistener.onscroll(view, firstvisibleitem, visibleitemcount, totalitemcount); } } @override public void onscrollstatechanged(abslistview view, int scrollstate) { mcurrentscrollstate = scrollstate; if (mcurrentscrollstate == scroll_state_idle) { mbouncehack = false; } if (monscrolllistener != null) { monscrolllistener.onscrollstatechanged(view, scrollstate); } } public void prepareforrefresh() { resetheaderpadding(); mrefreshviewimage.setvisibility(view.gone); // need hack, otherwise maintain previous drawable. mrefreshviewimage.setimagedrawable(null); mrefreshviewprogress.setvisibility(view.visible); // set refresh view text refreshing label mrefreshviewtext.settext(r.string.pull_to_refresh_refreshing_label); mrefreshstate = refreshing; } public void onrefresh() { log.d(tag, "onrefresh"); if (monrefreshlistener != null) { monrefreshlistener.onrefresh(); } } /** * resets list normal state after refresh. * @param lastupdated lastly updated at. */ public void onrefreshcomplete(charsequence lastupdated) { setlastupdated(lastupdated); onrefreshcomplete(); } /** * resets list normal state after refresh. */ public void onrefreshcomplete() { log.d(tag, "onrefreshcomplete"); resetheader(); // if refresh view visible when loading completes, scroll downwards // next item. if (getfirstvisibleposition() == 0) { invalidateviews(); setselection(1); } } /** * invoked when refresh view clicked on. used when * there's few items in list , it's not possible drag * list. */ private class onclickrefreshlistener implements onclicklistener { @override public void onclick(view v) { if (mrefreshstate != refreshing) { prepareforrefresh(); onrefresh(); } } } /** * interface definition callback invoked when list should * refreshed. */ public interface onrefreshlistener { /** * called when list should refreshed. * <p> * phone call {@link pulltorefreshlistview #onrefreshcomplete()} * expected indicate refresh has completed. */ public void onrefresh(); } }

here's logcat error when run app:

10-20 05:26:12.867: e/androidruntime(2633): fatal exception: main java.lang.runtimeexception: unable start activity componentinfo{com.zanqi.testtest/com.zanqi.testtest.mainactivity}: java.lang.nullpointerexception @ android.app.activitythread.performlaunchactivity(activitythread.java:2211) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2261) @ android.app.activitythread.access$600(activitythread.java:141) @ android.app.activitythread$h.handlemessage(activitythread.java:1256) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:5103) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:525) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) @ dalvik.system.nativestart.main(native method) caused by: java.lang.nullpointerexception @ com.zanqi.testtest.mainactivity.oncreate(mainactivity.java:67) @ android.app.activity.performcreate(activity.java:5133) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) @ android.app.activitythread.performlaunchactivity(activitythread.java:2175) ... 11 more

you not initializing list(instance of pulltorefreshlistview) please add together next line in oncreate method of activity

list = (pulltorefreshlistview) findviewbyid(r.id.yourlistviewid);

then phone call setonrefreshlistener . initialize other variables want use.

android listview android-activity android-listview refresh

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -