Android update recyclerView items -
i have simple problem on update recyclerview
items new data, i'm wondering code work fine without using data binding, in code adding new items trigger click on button clickonsendcommandtorobot
method, method must add new item list
, adapter can know add new data , refresh recyclerview
, dont error, list size 1
public class activityregister extends baseactivities { private robotmessagesadapter adapter; private list<robotviewmodel> model; private static final string tag = "register"; @override public void oncreate(@nullable bundle savedinstancestate) { super.oncreate(savedinstancestate); binding = databindingutil.setcontentview(this, r.layout.activity_register); activityregisterpresenter presenter = new activityregisterpresenter(this); activityregisterviewmodel viewmodel = new activityregisterviewmodel(); binding.setviewmodel(viewmodel); binding.setpresenter(presenter); if (savedinstancestate == null) { model = new arraylist<>(); } else { model = savedinstancestate.getparcelablearraylist("model"); } adapter = new robotmessagesadapter(this, model); binding.registerrobot.setadapter(adapter); ... } @override public void clickonsendcommandtorobot() { robotviewmodel temp = new robotviewmodel(); temp.setmessage(math.round(math.random()) + ""); temp.setmessagetype(sv.robotmessagetype.sent_by_robot.ordinal()); model.add(temp); log.e(tag, model.size() + ""); adapter.setdata(model); } @override protected void onsaveinstancestate(bundle outstate) { outstate.putparcelablearraylist("model", (arraylist) model); super.onsaveinstancestate(outstate); } }
adapter setdata
method:
public void setdata(list<robotviewmodel> data) { log.e("data size ", data.size() + ""); list.clear(); list.addall(data); notifydatasetchanged(); }
for each clicking on button , trigger clickonsendcommandtorobot
method. model
variable clear , don't have latest added items , adapter dont refresh list new added item. logcat:
04-08 08:29:45.342 21470-21470/com.sample.myapp e/register: 1 04-08 08:29:45.343 21470-21470/com.sample.myapp e/data size: 1 04-08 08:29:46.658 21470-21470/com.sample.myapp e/register: 1 04-08 08:29:46.658 21470-21470/com.sample.myapp e/data size: 1 04-08 08:29:47.462 21470-21470/com.sample.myapp e/register: 1 04-08 08:29:47.462 21470-21470/com.sample.myapp e/data size: 1
because model reference recycler view adapter itself, changes made outside model object links adapter.so outside adapter class model located just, call notifydatasetchange there.so adapter.setdata(model);
remove , adapter.notifydatasetchange();
@override public void clickonsendcommandtorobot() { robotviewmodel temp = new robotviewmodel(); temp.setmessage(math.round(math.random()) + ""); temp.setmessagetype(sv.robotmessagetype.sent_by_robot.ordinal()); model.add(temp); log.e(tag, model.size() + ""); adapter.notifydatasetchanged(); }
Comments
Post a Comment