android - Problems with Picasso and Recyclerview - Images get refreshed on scrolling but in the wrong imageviews -
i working on simple app search tv show, app generates request tmdb. there trying display images , details of results in cardview. using picasso loading images tmdb , works fine. problem when scroll, images loaded first refreshed other imageviews instead of show specific images.
this asynctask code
class jsontask extends asynctask<string,string,string[][]>{ private list<feeditem> persons; string [][] finalarray = new string[200][3]; @targetapi(build.version_codes.kitkat) @override protected string[][] doinbackground(string... params) { httpurlconnection urlconnection = null; stringbuffer buffer = new stringbuffer(); string line; bufferedreader reader = null; try{ url request1 = new url(params[0]); urlconnection = (httpurlconnection) request1.openconnection(); urlconnection.setrequestproperty("accept", "application/json"); urlconnection.setrequestmethod("get"); urlconnection.setdoinput(true); urlconnection.connect(); int responsecode = urlconnection.getresponsecode(); log.d("debug_tag", "the response code is: " + responsecode + " " + urlconnection.getresponsemessage()); inputstream in = urlconnection.getinputstream(); reader = new bufferedreader(new inputstreamreader(in)); while ((line = reader.readline())!=null){ log.i("check","line is"+line); buffer.append(line); } string jsonobjectt= buffer.tostring(); jsonobject parentjson = new jsonobject(jsonobjectt); jsonarray parentarray = (jsonarray) parentjson.get("results"); dataobtained=parentjson.getint("total_results"); for(int = 0; i<parentjson.getint("total_results"); i++){ jsonobject temp = parentarray.getjsonobject(i); finalarray[i][0] = temp.getstring("original_name"); finalarray[i][1] = temp.getstring("first_air_date"); finalarray[i][2] = temp.getstring("poster_path"); } } catch (malformedurlexception e){ log.i("i do", "eee1"); e.printstacktrace(); } catch (ioexception e) { log.i("i do", "eee2"); e.printstacktrace(); } catch (jsonexception e) { e.printstacktrace(); } { log.i("i do", "eee3"); if(urlconnection!=null) urlconnection.disconnect(); try { if(reader!=null) reader.close(); } catch (ioexception e) { log.i("i do", "eee4"); e.printstacktrace(); } } return finalarray; } @override protected void onpostexecute(string[][] result) { persons = new arraylist<>(); for(int i=0;i<dataobtained;i++){ //if(!result[i][0].isempty()&&result[i][2]!=null) persons.add(new feeditem(result[i][0], result[i][1],"http://image.tmdb.org/t/p/w500"+result[i][2],searchpagee.this)); } new thread(new runnable() { @override public void run() { } }).start(); mrecyclerview.setlayoutmanager(llm); rvadapter adapter = new rvadapter(persons); mrecyclerview.setadapter(adapter); } } } and recycleradapter code
public class rvadapter extends recyclerview.adapter<rvadapter.personviewholder>{ list<feeditem> persons; rvadapter(list<feeditem> persons){ this.persons = persons; } public static class personviewholder extends recyclerview.viewholder { public static imageview personphoto; cardview cv; textview personname; textview personage; personviewholder(view itemview) { super(itemview); cv = (cardview)itemview.findviewbyid(r.id.cv); personname = (textview)itemview.findviewbyid(r.id.titlecir); personage = (textview)itemview.findviewbyid(r.id.contentscir); personphoto = (imageview)itemview.findviewbyid(r.id.person_photo); } } @override public personviewholder oncreateviewholder(viewgroup viewgroup, int i) { view v = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.cardv, viewgroup, false); personviewholder pvh = new personviewholder(v); return pvh; } @override public void onbindviewholder(personviewholder personviewholder, int i) { personviewholder.personname.settext(persons.get(i).title); personviewholder.personage.settext(persons.get(i).content); picasso.with(persons.get(i).context).load(persons.get(i).photoid).placeholder(r.drawable.placeholder).fit().into(personviewholder.personphoto); } @override public int getitemcount() { return persons == null ? 0 : persons.size(); } }
add bindview() in personviewholder this,
public static class personviewholder extends recyclerview.viewholder { public static imageview personphoto; cardview cv; textview personname; textview personage; personviewholder(view itemview) { super(itemview); cv = (cardview)itemview.findviewbyid(r.id.cv); personname = (textview)itemview.findviewbyid(r.id.titlecir); personage = (textview)itemview.findviewbyid(r.id.contentscir); personphoto = (imageview)itemview.findviewbyid(r.id.person_photo); } public void bindview(int i) { personname.settext(persons.get(i).title); personage.settext(persons.get(i).content); picasso.with(persons.get(i).context).load(persons.get(i).photoid).placeholder(r.drawable.placeholder).fit().into(personphoto); } } and in bindviewholder need call bindview() bind each element of list appropriate elements.
@override public void onbindviewholder(personviewholder personviewholder, int i) { try { personviewholder.bindview(i); } catch(exception e) {e.printstacktrace();} }
Comments
Post a Comment