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));
运行您的应用程序,以确保一切正常。没有项目,因为您还没有连接到数据,所以应用程序应该显示没有任何列表项目的灰色背景。

android项目实战 Android JetPack架构篇,一个实战项目带你学懂JetPack


文章图片

填充数据库
要在应用程序启动时删除所有内容并重新填充数据库,可以创建一个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&gt。
& ltstringname="button_save " >保存&lt。/string&gt。
& ltstringname="empty_not_saved " >Word未保存,因为它是空的。& lt/string&gt。
在value/color s.xml中添加此颜色资源:
& ltcolorname="buttonLabel " >#d3d3d3 &lt。/color&gt。
将这些维度资源添加到values/dimens.xml:
& ltdimenname="small_padding "/>
现在你有了实际应用,让我们回顾一下你构建了什么。这是最发达的应用程序的结构。您有一个在列表中显示单词的应用程序(主活动、循环查看、单词列表适配器)。您可以向列表中添加一个新的单词活动。单词是单词实体类的一个实例。单词以单词列表(mwords)的形式缓存在RecyclerViewAdapter中。当数据库中的单词发生变化时,单词列表会自动更新并重新显示。
自动用户界面更新的数据流(反应式用户界面)
自动更新是可能的,因为我们正在使用实时数据。在主要活动中,一名观察者从数据库中观察到“实时数据”一词,并在它们发生变化时得到通知。当发生变化时,观察者的onChange()方法将被执行,WordListAdapter中的mWord将被更新。你可以观察数据,因为它是实时数据。据观察,livedata

推荐阅读