android - I am getting the items in Listview repeated . Here is my sample code I am unable to find the bug in my code ! Can anyone help me out please? -


    //this joblistadapter class      package com.example.hellotest.adapters;      import java.text.parseexception;     import java.text.simpledateformat;     import java.util.list;     import java.util.locale;      import android.content.context;     import android.view.layoutinflater;     import android.view.view;     import android.view.viewgroup;     import android.widget.baseadapter;     import android.widget.textview;      import com.example.hellotest.r;     import com.example.hellotest.model.job;      public class joblistadapter extends baseadapter {          private layoutinflater minflater ;         private list<job> mjobs;         private simpledateformat mdateformat;         private simpledateformat minputformat;         private string mposterprefix;          public joblistadapter(context context) {             minflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service);             mdateformat = new simpledateformat("dd mmmm yyyy", locale.us);             minputformat = new simpledateformat("yyyy-mm-dd hh:mm:ss", locale.us);             mposterprefix = context.getstring(r.string.job_posted_by);         }          public void setjoblist(list<job> jobs) {             mjobs = jobs;         }          @override         public int getcount() {             if(null != mjobs) {                 return mjobs.size();             }             return 0;         }          @override         public object getitem(int position) {             return mjobs.get(position);         }          @override         public long getitemid(int position) {             return mjobs.get(position).getid();         }     //this method think problem please tell me.         @override         public view getview(int position, view convertview, viewgroup parent) {             viewholder holder;             if(null == convertview) {                 convertview = minflater.inflate(r.layout.job_list_row, null);                 holder = new viewholder();                 holder.created = (textview) convertview.findviewbyid(r.id.job_listing_date);                 holder.location = (textview) convertview.findviewbyid(r.id.job_listing_location);                 holder.title = (textview) convertview.findviewbyid(r.id.job_listing_title);                 holder.experience = (textview) convertview.findviewbyid(r.id.job_listing_experience);                 holder.poster = (textview) convertview.findviewbyid(r.id.job_listing_posted_by);                 convertview.settag(holder);             } else {                 holder = (viewholder) convertview.gettag();             }                updaterow(holder, mjobs.get(position));             return convertview;         }          private void updaterow(viewholder holder, job job) {             holder.title.settext(job.gettitle());             int id = job.ispremium() ? r.drawable.icon_premium : 0;             holder.created.settext(getdate(job.getcreated()));             holder.created.setcompounddrawableswithintrinsicbounds(0, 0, id, 0);             holder.experience.settext(job.getexperience());             holder.location.settext(job.getlocation());             holder.poster.settext(mposterprefix + job.getposter());         }          private charsequence getdate(string created) {             try {                 return mdateformat.format(minputformat.parse(created));             } catch (parseexception e) {                 e.printstacktrace();             }             return created;         }          private static class viewholder {             textview created;             textview title;             textview location;             textview experience;             textview poster;         }      }     // layout fragmentjob_listing make listview height fill_parent suggested when      googled solution issue.      <?xml version="1.0" encoding="utf-8"?>     <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical" >          <linearlayout             android:id="@+id/job_listing_filter_container"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:background="@drawable/job_listing_tab_bg"             android:gravity="center_vertical"             android:minheight="48dp" >              <textview                 android:id="@+id/job_listing_experience"                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="1"                 android:background="@drawable/selector_job_listing_tab"                 android:clickable="true"                 android:gravity="center"                 android:text="@string/job_listing_experience" />              <imageview                 android:id="@+id/space2"                 android:layout_width="1dp"                 android:layout_height="match_parent"                 android:contentdescription="@string/app_name"                 android:scaletype="fitxy"                 android:src="@drawable/job_listing_horizontal_divider" />              <textview                 android:id="@+id/job_listing_location"                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="1"                 android:background="@drawable/selector_job_listing_tab"                 android:clickable="true"                 android:gravity="center"                 android:text="@string/job_listing_location" />         </linearlayout>          <imageview             android:id="@+id/imageview1"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:contentdescription="@string/app_name"             android:scaletype="fitxy"             android:src="@drawable/job_listing_divider" />          <textview             android:id="@+id/job_listing_message"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:layout_gravity="center"             android:gravity="center"             android:visibility="gone"/>          <listview             android:id="@+id/job_list"             android:layout_width="fill_parent"             android:layout_height="fill_parent">          </listview>      </linearlayout>     // joblistingfragment class joblistadapter class called      package com.example.hellotest;      import java.util.list;      import android.app.activity;     import android.content.intent;     import android.os.bundle;     import android.support.v4.app.fragment;     import android.text.textutils;     import android.view.layoutinflater;     import android.view.view;     import android.view.view.onclicklistener;     import android.view.viewgroup;     import android.widget.abslistview;     import android.widget.abslistview.onscrolllistener;     import android.widget.adapterview;     import android.widget.adapterview.onitemclicklistener;     import android.widget.listview;     import android.widget.progressbar;     import android.widget.textview;     import android.widget.toast;      import com.android.volley.request.method;     import com.android.volley.requestqueue;     import com.android.volley.response;     import com.android.volley.response.errorlistener;     import com.android.volley.response.listener;     import com.android.volley.volleyerror;     import com.android.volley.toolbox.volley;     import com.example.hellotest.r;     import com.example.hellotest.adapters.joblistadapter;     import com.example.hellotest.config.constant;     import com.example.hellotest.io.cookiestringrequest;     import com.example.hellotest.io.json.jobsprocessor;     import com.example.hellotest.model.job;     import com.example.hellotest.model.joblist;     import com.example.hellotest.model.pagination;     import com.example.hellotest.tasks.jsonparsertask;     import com.example.hellotest.tasks.jsonparsinglistener;     import com.example.hellotest.util.accountutils;     import com.example.hellotest.util.log;      public class joblistingfragment extends fragment {          public static final string arg_url = "argument_url";         public static final string arg_is_filter_on = "argument_is_filtered";         public static final string arg_is_default_job_list = "argument_is_default_job_list";         public static final string arg_empty_message = "argument_empty_message";          protected static final int request_experience = 0x11;         protected static final int request_location = 0x12;         private listview mjobslist;         private textview mmessageview;         private joblistadapter madapter;         private list<job> mjobs;         private pagination mpagination;         private boolean misfetching;         private boolean misdefaultlist;         private boolean misfilteron;         private string murl;         private string mlocid;         private int mexperienceid = -1;         private progressbar mfooterprogress;         private log mlogger = new log(joblistingfragment.class);         private object mrequesttag = new object();         private requestqueue mrequestqueue;          @override         public void oncreate(bundle savedinstancestate) {             super.oncreate(savedinstancestate);             madapter = new joblistadapter(getactivity());             if (null != savedinstancestate) {                 getstate(savedinstancestate);             } else {                 getstate(getarguments());             }     //      init();         }          @override         public void onattach(activity activity) {             super.onattach(activity);             mrequestqueue = volley.newrequestqueue(getactivity());         }          @override         public void ondetach() {             mrequestqueue.cancelall(mrequesttag);             super.ondetach();         }          @override         public void onresume() {             init();             super.onresume();         }          private void getstate(bundle bundle) {             murl = bundle.getstring(arg_url);             misfilteron = bundle.getboolean(arg_is_filter_on);             misdefaultlist = bundle.getboolean(arg_is_default_job_list);         }          @override         public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate)         {             view view = inflater.inflate(r.layout.fragment_job_listing, null);             mjobslist = (listview) view.findviewbyid(r.id.job_list);             mmessageview = (textview) view.findviewbyid(r.id.job_listing_message);             return view;         }          @override         public void onviewcreated(view view, bundle savedinstancestate) {             view footer = getlayoutinflater(savedinstancestate).inflate(r.layout.paginated_list_footer, null);             mfooterprogress = (progressbar) footer.findviewbyid(r.id.footer_progress);             if (!misfilteron) {                 view.findviewbyid(r.id.job_listing_filter_container).setvisibility(view.gone);             } else {                 view.findviewbyid(r.id.job_listing_experience).setonclicklistener(monclicklistener);                 view.findviewbyid(r.id.job_listing_location).setonclicklistener(monclicklistener);             }             mjobslist.addfooterview(footer);             mjobslist.setadapter(madapter);             mjobslist.setonscrolllistener(monscrolllistener);             mjobslist.setonitemclicklistener(monitemclicklistener);             super.onviewcreated(view, savedinstancestate);         }          @override         public void onsaveinstancestate(bundle outstate) {             outstate.putstring(arg_url, murl);             outstate.putboolean(arg_is_filter_on, misfilteron);             outstate.putboolean(arg_is_default_job_list, misdefaultlist);             super.onsaveinstancestate(outstate);         }          public void startafresh(string url, boolean ispaginated) {             mlogger.d("old fragment reused");             misfilteron = true;             murl = url;             reset();             init();         }          private void init() {             mlocid = accountutils.getlocationfilter();             mexperienceid = accountutils.getexperiencefilter();             string url = geturl(1);             fetchjobs(url);          }          private void reset() {             mjobs = null;             mpagination = null;             madapter.setjoblist(null);             madapter.notifydatasetchanged();         }          private string geturl(int pagenumber) {             string appender = "";             if (misfilteron) {                 if (null != mlocid || -1 < mexperienceid) {                     if (null != mlocid) {                         appender += "/loc-" + mlocid;                     } else {                         appender += "/loc-" + 0;                     }                      if (-1 < mexperienceid) {                         appender += "/exp-" + mexperienceid;                     } else {                         appender += "/exp-" + 0;                     }                 }             }             string url = murl + appender + "/pg-" + pagenumber;             if (misdefaultlist && accountutils.isloggedin()) {                 url += "?" + constant.map_cookie_key + "=" + accountutils.getcookie();             }             return url;         }          private void fetchjobs(string url) {             misfetching = true;             mlogger.d("url :" + url);             int method = misdefaultlist ? method.get : method.post;             cookiestringrequest request = new cookiestringrequest(method, url, mlistener, merrorlistener);             request.settag(mrequesttag);             mrequestqueue.add(request);         }          private response.listener<string> mlistener = new listener<string>() {              @override             public void onresponse(string response) {                 mlogger.d("response :" + response);                 jsonparsertask<joblist> jsontask = new jsonparsertask<joblist>(new jobsprocessor());                 jsontask.setlistener(mjsonlistener);                 jsontask.execute(response);              }         };          private response.errorlistener merrorlistener = new errorlistener() {              @override             public void onerrorresponse(volleyerror error) {                 misfetching = false;                 toast.maketext(getactivity(), r.string.network_error, toast.length_long).show();             }         };          private jsonparsinglistener<joblist> mjsonlistener = new jsonparsinglistener<joblist>() {              @override             public void onsuccess(joblist result) {                 if (null == mpagination) {                     mpagination = result.getpagination();                     mpagination.setcurrentpage(0);                     if(null == result.getjobs() || 0 == result.getjobs().size()) {                         mmessageview.settext(getarguments().getstring(arg_empty_message));                         mmessageview.setvisibility(view.visible);                     } else {                         mmessageview.setvisibility(view.gone);                     }                 } else {                     mpagination.updatedata(result.getpagination());                 }                  if (null != mjobs) {                     mjobs.addall(result.getjobs());                 } else {                     mjobs = result.getjobs();                 }                 madapter.setjoblist(mjobs);                 madapter.notifydatasetchanged();                 misfetching = false;             }              @override             public void onfailure(exception e) {                 toast.maketext(getactivity(), "unable process response", toast.length_long).show();                 misfetching = false;             }         };          private onitemclicklistener monitemclicklistener = new onitemclicklistener() {              @override             public void onitemclick(adapterview<?> parent, view view, int position, long id) {                 job job = (job) madapter.getitem(position);                 intent intent = new intent(getactivity(), jobdetailsactivity.class);                 intent.putextra(jobdetailsactivity.extra_job, job);                 startactivity(intent);             }         }; 

// function found might cause problem because when scrolls down items in list repeated. private onscrolllistener monscrolllistener = new onscrolllistener() {

            @override             public void onscrollstatechanged(abslistview view, int scrollstate) {              }              @override             public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) {                 boolean loadmore = firstvisibleitem + visibleitemcount >= totalitemcount;                 if (loadmore && totalitemcount > 0 && null != mpagination) {                     boolean islastpage = mpagination.getcurrentpage() >= mpagination.gettotalpages();                     if (islastpage) {                         mfooterprogress.setvisibility(view.gone);                     }                     if (!misfetching && !islastpage) {                         fetchjobs(geturl(mpagination.getcurrentpage()+1));                     }                 }             }         };          public void onactivityresult(int requestcode, int resultcode, intent data) {             if (activity.result_ok == resultcode) {                 switch (requestcode) {                 case request_experience:                     onexperienceselection(data);                     break;                  case request_location:                     onlocationselection(data);                     break;                 }             }         } 

add 1 more line in function:

mjob.clear();   private jsonparsinglistener<joblist> mjsonlistener = new jsonparsinglistener<joblist>() {          @override         public void onsuccess(joblist result) {             if (null == mpagination) {                 mpagination = result.getpagination();                 mpagination.setcurrentpage(0);                 if(null == result.getjobs() || 0 == result.getjobs().size()) {                     mmessageview.settext(getarguments().getstring(arg_empty_message));                     mmessageview.setvisibility(view.visible);                 } else {                     mmessageview.setvisibility(view.gone);                 }             } else {                 mpagination.updatedata(result.getpagination());             }              if (null != mjobs) {                 mjobs.clear();                 mjobs.addall(result.getjobs());             } else {                 mjobs = result.getjobs();             }             madapter.setjoblist(mjobs);             madapter.notifydatasetchanged();             misfetching = false;         } 

Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -