android - ImageView reference not getting updated after Passing Position of RecyclerView To PagerAdapter in order to update ImageView reference -
this customadapter class
public class customadapter extends pageradapter { context ctx;view v; int a[]= {r.drawable.dbz,r.drawable.fatherandson,r.drawable.gohan,r.drawable.gohanssj,r.drawable.gohanssjb,r.drawable.gokussjb , r.drawable.gokussjg,r.drawable.songohan,r.drawable.vegitassjb,r.drawable.vegitassjg}; layoutinflater layoutinflater; button btn; customadapter(context ctx){ this.ctx=ctx; } @override public int getcount() { return a.length; } @override public boolean isviewfromobject(view view, object object) { return (view==(relativelayout)object); } @override public object instantiateitem(viewgroup container, final int position) { layoutinflater=(layoutinflater) ctx.getsystemservice(context.layout_inflater_service); view view=layoutinflater.inflate(r.layout.swipe_layout,container,false); v=view; imageview img=(imageview)view.findviewbyid(r.id.imgview); btn =(button)view.findviewbyid(r.id.button); img.setimageresource(a[position]); btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { wallpapermanager wallpapermanager=wallpapermanager.getinstance(ctx); try { wallpapermanager.setresource(a[position]); } catch (ioexception e) { e.printstacktrace(); } } }); container.addview(view); return view; } @override public int getitemposition(object object) { return position_none; } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview((relativelayout)object); } public void sendposition(int position) { imageview img=(imageview)v.findviewbyid(r.id.imgview); toast.maketext(ctx, ""+a[position], toast.length_short).show(); img.setimageresource(a[position]); }
}
this mainactivity class
public class mainactivity extends appcompatactivity { private recyclerview recyclerview; private recyclerview.layoutmanager layoutmanager; private recyclerview.adapter adapter; private arraylist<integer> mdataset; viewpager viewpager; customadapter adapter2; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); viewpager=(viewpager)findviewbyid(r.id.viewpager); adapter2=new customadapter(this); viewpager.setadapter(adapter2); mdataset = new arraylist<>(); mdataset.add(r.drawable.formatfactorydbz); mdataset.add(r.drawable.formatfactoryfatherandson); mdataset.add(r.drawable.formatfactorygohan); mdataset.add(r.drawable.formatfactorygohanssj); mdataset.add(r.drawable.formatfactorygohanssjb); mdataset.add(r.drawable.formatfactorygokussjb); mdataset.add(r.drawable.formatfactorygokussjg); mdataset.add(r.drawable.formatfactorysongohan); mdataset.add(r.drawable.formatfactoryvegitassjb); mdataset.add(r.drawable.formatfactoryvegitassjg); recyclerview = (recyclerview) findviewbyid(r.id.recycler_view); recyclerview.sethasfixedsize(true); layoutmanager = new linearlayoutmanager(this, linearlayoutmanager.horizontal, false); recyclerview.setlayoutmanager(layoutmanager); adapter = new mainadapter(mdataset); recyclerview.setadapter(adapter); recyclerview.addonitemtouchlistener(new recycleritemclicklistener(this, recyclerview, new recycleritemclicklistener.onitemclicklistener() { @override public void onitemclick(view view, int position) { // whatever adapter2.sendposition(position); } @override public void onlongitemclick(view view, int position) { // whatever } })); } }
i sending position of image sendposition method mainactivity customadapter , position value correct when toast when try fix image in imageview nothing happens. therefore, know doing wrong.
it happens because use adapter in wrong way. adapter creates several views via instantiateitem
method , save last 1 in field v
, out of screen. default viewpager
invokes instantiateitem
current position , near positions caching.
as understand code, should prefer invoke viewpager.setcurrentitem(position);
Comments
Post a Comment