android项目实战 Android JetPack架构篇,一个实战项目带你学懂JetPack( 五 )
view item view = minflatter . explain(r . layout . recycle view _ item,parent,false);
returnNewWordViewholder(ItemView);
}
@覆盖
publicationbindviewholder(WordViewholder holder,intposition){
if(mWords!= null) {
word current = mwords . get(position);
holder . WordItemView . SetText(current . GetWord());
} else{
//包括数据尚未准备好的情况。
holder.wordItemView.setText("无字");
}
}
无效单词(列表& ltWord & gt单词){
mWords =单词;
notifyDataScheached();
}
// getItemCount()被多次调用,第一次调用时,
// mWords未更新(表示最初为null,我们不能返回null)。
@覆盖
publiintgetitemcount(){
if(mWords!= null)
returnmwords . size();
elsereturn0
}
}
在MainActivity的onCreate()方法中添加一个ReccyclerView。在onCreate()方法中:
recycle view recycle view = findViewById(r . id . recycle view);
finalWordListAdapter = NewWordListAdapter(this);
recyclerView.setAdapter(适配器);
recycle view . Setlayout manager(NewLinearlayout manager(this));
运行您的应用程序,以确保一切正常。没有项目,因为您还没有连接到数据,所以应用程序应该显示没有任何列表项目的灰色背景。
文章图片
填充数据库
要在应用程序启动时删除所有内容并重新填充数据库,可以创建一个RoomDatabase。回调并覆盖onOpen()。无法在用户界面线程上执行房间数据库操作,打开()创建并执行一个向数据库添加内容的任务。
下面是在WordRoomDatabase类中创建回调的代码:
私有静态空间数据库。回调sRoomDatabaseCallback =
新空间数据库。回调(){
@覆盖
public void onopen(@ nonNull SupportSqLiteDatabaSe db){
super . onopen(db);
newPopulateDbAsync(INSTANCE)。execute();
}
};
下面是AsyncTask的代码,删除数据库的内容,然后用“Hello”和“World”两个字填充数据库。欢迎补充更多文字!
privatesticclasspopulatedbacksyncextendsasynctask & lt;无效,无效,无效>{
privatefinalWordDao mDao
PopulatedBasync(WordRoomDatabaSe db){
mDao = db . WordDao();
}
@覆盖
protectedVoid doInBackground(最终无效...params){
mdao . delete all();
word word = new word(" Hello ");
mdao . insert(word);
word = new word(" World ");
mdao . insert(word);
returnnull
}
}
最后,打电话之前。build(),向数据库构建序列添加回调。
。添加回调(sRoomDatabaseCallback)
添加新单词活动
将这些字符串资源添加到values/strings.xml:
& ltstringname="hint_word " >词...& lt/string>。
& ltstringname="button_save " >保存<。/string>。
& ltstringname="empty_not_saved " >Word未保存,因为它是空的。& lt/string>。
在value/color s.xml中添加此颜色资源:
& ltcolorname="buttonLabel " >#d3d3d3 <。/color>。
将这些维度资源添加到values/dimens.xml:
& ltdimenname="small_padding "/>
现在你有了实际应用,让我们回顾一下你构建了什么。这是最发达的应用程序的结构。您有一个在列表中显示单词的应用程序(主活动、循环查看、单词列表适配器)。您可以向列表中添加一个新的单词活动。单词是单词实体类的一个实例。单词以单词列表(mwords)的形式缓存在RecyclerViewAdapter中。当数据库中的单词发生变化时,单词列表会自动更新并重新显示。
自动用户界面更新的数据流(反应式用户界面)
自动更新是可能的,因为我们正在使用实时数据。在主要活动中,一名观察者从数据库中观察到“实时数据”一词,并在它们发生变化时得到通知。当发生变化时,观察者的onChange()方法将被执行,WordListAdapter中的mWord将被更新。你可以观察数据,因为它是实时数据。据观察,livedata
推荐阅读
- 张忠德、林定坤入选2021年岐黄学者支持项目
- 淮阳区召开乡村振兴示范村创建暨2022年农业产业项目座谈会
- 闵行推出的这个新项目,已覆盖20多所幼儿园,家长反馈良好
- 和平精英:首款特效平底锅的实战效果!颜值在线,氪度却不美丽!
- 《一梦江湖》金陵奇妙会上演精彩娱乐项目,吃货们别忘了参加
- 永兴县:3.5亿元乡村振兴项目成功签约
- 王者荣耀:顶级难度五大英雄,500场实战仅入门,会玩的很少
- 第四届“奇璞奖”评选启动,九大赛道全面检阅健康产业价值创新项目(附报名通道)
- 王者荣耀新英雄实战几百场只算是入门,这三位英雄你会做到吗
- 经验交流 | 竹基镇:突出党建引领 选好用活沪滇帮扶项目