我正在编写一个数据库,用于使用 Room 保存有关 Android 应用程序中单词的信息。我已经构建了两个实体:Group 和 VocaNote。在组和 VocaNote 之间,我使用一对多关系将 VocaNote 数组保留在单独的组中。
团体课
@Entity(indices = {
@Index(value = {"language", "nameGroup"}, unique = true)
}
)
public class Group {
@PrimaryKey(autoGenerate = true)
public long id;
@ColumnInfo(name = "language")
public String language;
@ColumnInfo(name = "name_group")
public String nameGroup;
}
Run Code Online (Sandbox Code Playgroud)
VocaNote 类
@Entity(foreignKeys = @ForeignKey(entity = Group.class,
parentColumns = "id",
childColumns = "group_id",
onDelete = CASCADE))
public class VocaNote {
@PrimaryKey(autoGenerate = true)
public long id;
@ColumnInfo(name = "origin_word")
public String originWord;
@ColumnInfo(name …Run Code Online (Sandbox Code Playgroud) 我正在使用Room数据库编写Android应用。我的数据库包含具有以下代码的GroupVc实体:
@Entity
public class GroupVc {
@ColumnInfo(name = "language")
private String language;
@NonNull
@PrimaryKey
@ColumnInfo(name = "name_group")
private String nameGroup;
public GroupVc(String language, String nameGroup) {
this.language = language;
this.nameGroup = nameGroup;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
@NonNull
public String getNameGroup() {
return nameGroup;
}
@NonNull
public void setNameGroup(String nameGroup) {
this.nameGroup = nameGroup;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我的实体类包含两列,其中nameGroup是我的PrimaryKey。在我的应用程序中,我想让用户查看组的完整列表,并通过输入新的组名称来更改组DialogFragments的名称。为了实现这样的功能,我创建了下一个DAO @Query方法:
@Dao
public interface GroupVcDao {
@Query("UPDATE groupvc SET name_group= :newName …Run Code Online (Sandbox Code Playgroud) 我创建了 RecyclerView,其中包含简单的单词列表(GroupVc 对象的字符串名称)。由于列表可能很长,我想使用工具栏中的 SearchView 对其进行过滤。我的应用程序的架构基于 Android 架构组件,其中所有 GroupVc 对象都存在于 Room 数据库中,并且通过 ViewModel 和 Repository 对象提供从 UI 对 DataBase 的访问。我正在将包含在 LiveData 中的所有 GroupsVc 列表归档到 RecyclerView 以保持更新。我的问题是我不知道如何使 RecyclerView 可过滤。我尝试通过在适配器中实现可过滤接口来做到这一点:
public class GroupsVcAdapter extends
RecyclerView.Adapter<GroupsViewHolder> implements Filterable{
private LayoutInflater mInflater;
private List<GroupVc> mGroupsVc;
private List<GroupVc> filteredGroupsVc;
private OnItemClicked onClick;
public GroupsVcAdapter(Context context, OnItemClicked onClick) {
mInflater = LayoutInflater.from(context);
this.onClick = onClick;
}
public List<GroupVc> getmGroupsVc() {
return mGroupsVc;
}
@Override
public GroupsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = mInflater.inflate(R.layout.layout_list_of_groups, parent, false); …Run Code Online (Sandbox Code Playgroud) android android-recyclerview android-livedata android-architecture-components
android ×3
android-architecture-components ×1
android-room ×1
database ×1
orm ×1
sql ×1
sql-update ×1
sqlite ×1