[英]Android update recyclerView items
我有一个关于通过新数据更新recyclerview
项的简单问题,我想知道哪种代码在不使用数据绑定的情况下也能正常工作,在我的代码中添加新项(通过单击按钮作为clickOnSendCommandToRobot
方法触发),此方法必须将新项添加到List
和我的适配器可以知道添加新数据并刷新RecyclerView
,我没有收到任何错误,但列表大小始终为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);
}
}
适配器setData
方法:
public void setData(List<RobotViewModel> data) {
Log.e("data size ", data.size() + "");
list.clear();
list.addAll(data);
notifyDataSetChanged();
}
对于每个单击按钮并触发clickOnSendCommandToRobot
方法。 model
变量清除,并且我没有最新添加的项,并且适配器不按新添加的项刷新列表。 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
因为模型是对回收者视图适配器本身的引用,所以对外部模型对象所做的任何更改都将链接回到适配器。因此,在仅位于模型所在的适配器类之外,请调用notifyDataSetChange那里adapter.setData(model);
删除并简单地执行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(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.