Android适配器如何决定重新渲染什么?
假设我有一个Android适配器如何决定重新渲染什么?,android,android-listview,android-arrayadapter,sugarorm,Android,Android Listview,Android Arrayadapter,Sugarorm,假设我有一个列表。现在,我可以将此列表包装在ArrayAdapter中 List<User> users = Users.getAll(); ArrayAdapter<User> = new ArrayAdapter<User>(this, android.R.layout.simple_list_item_1, users); List users=users.getAll(); ArrayAdapter=新的ArrayAdapter(这是android.
列表
。现在,我可以将此列表包装在ArrayAdapter中
List<User> users = Users.getAll();
ArrayAdapter<User> = new ArrayAdapter<User>(this, android.R.layout.simple_list_item_1, users);
List users=users.getAll();
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,用户);
然后将适配器绑定到listview以显示用户列表
Users.getAll()
使用Sugar ORM查询数据库并返回用户列表。可以从显示用户列表的活动中将项目添加到用户列表中。我想知道如何更新listview
选项1
一种方法是手动更新用户
,将其作为I添加到数据库中,然后调用适配器.notifyDataSetChanged()
。这是可行的,但感觉不对,因为我维护了一个代表数据库中内容的“假”列表
选项2
我想知道如果我只是清除users
中的项目,用新数据库查询的结果更新它,然后调用adapter.notifyDataSetChanged()
,会有多糟糕
是否会丢弃所有子视图并重新渲染?还是调用equals()
方法查看绑定到每个子级的模型是否相同,然后只更新新的模型
其他信息
因为我使用的是SugarORM,所以我认为我无法访问游标来做更有效的事情。但是,如果有更好的方法使列表与SugarORM保持同步,我也很高兴听到这个消息。回答您的选项2:不,它不调用equals,因为适配器与小部件一起工作以重用视图,它不会为列表中的每个项创建新视图,它为每个可见项创建一个视图,并在滚动时重新使用离开屏幕的视图 这里最好的选择是创建您自己的适配器,创建一个扩展BaseAdapter的类,并在其中创建您自己的逻辑,重新查询数据库并通知listview(或gridview)的更改 另一方面,按照你在这里说的做: 我想知道如果我只是清除用户中的项目,用新数据库查询的结果更新它,然后调用adapter.notifyDataSetChanged()会有多糟糕
也不错。创建一个扩展
可观察的
的DAO类,然后让适配器实现观察者
。现在,每次添加或删除SugarRecord时,都要通过DAO类进行操作,注册为观察者的人将通过以下方法得到通知:
@Override
public void update(Observable observable, Object o)
您可以了解更多有关可观察/观察者模式的信息。这只是众多示例和教程中的一个 如果这是您要查找的答案,请在左侧用复选标记将其标记为已回答