android - Android 与 spinner 的一对多关系
问题描述
我有一个带有房间数据库的 Android 项目,我正在尝试使用 id 建立一对多的关系。所以在我的实体中,我添加了以下内容:
package com.app.entity.author;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import androidx.annotation.NonNull;
import com.app.entity.department.Department;
import com.app.entity.university.University;
@Entity(tableName = "author", foreignKeys = {
@ForeignKey(
entity = University.class,
parentColumns = "id",
childColumns = "university"
),
@ForeignKey(
entity = Department.class,
parentColumns = "id",
childColumns = "department"
)
})
public class Author {
@PrimaryKey(autoGenerate = true)
private Integer id;
@NonNull
private String firstName;
@NonNull
private String lastName;
@NonNull
private String email;
@NonNull
private Integer university;
@NonNull
private Integer department;
private String phone;
private String mobile;
private String profile;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public void setUniversity(Integer university) {
this.university = university;
}
public Integer getUniversity() {
return university;
}
public void setDepartment(Integer department) {
this.department = department;
}
public Integer getDepartment() {
return department;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPhone() {
return phone;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getMobile() {
return mobile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public String getProfile() {
return profile;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
return this.getId() == ((Author) obj).getId();
}
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(this.firstName).append(" ");
buf.append(this.lastName).append(" ");
buf.append(this.email).append(" ");
buf.append(this.university).append(" ");
buf.append(this.department).append(" ");
buf.append(this.phone).append(" ");
buf.append(this.mobile).append(" ");
buf.append(this.profile).append(" ");
return buf.toString();
}
}
在我的 AddActivity 我有以下内容:
universityRepository = new UniversityRepository(this);
universityRepository.getAllUniversitys().observe(this, new Observer<List<University>>() {
@Override
public void onChanged(List<University> university) {
ArrayAdapter<University> universityAdapter = new ArrayAdapter<>(AddNewAuthorActivity.this,
android.R.layout.simple_list_item_1, university);
universityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
universityEditText.setAdapter(universityAdapter);
}
});
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Author author = new Author();
author.setFirstName(firstNameEditText.getText().toString());
author.setLastName(lastNameEditText.getText().toString());
author.setEmail(emailEditText.getText().toString());
University university = (University) universityEditText.getSelectedItem();
author.setUniversity(university.getId()) ;
Department department = (Department) departmentEditText.getSelectedItem();
author.setDepartment(department.getId());
author.setPhone(phoneEditText.getText().toString());
author.setMobile(mobileEditText.getText().toString());
author.setProfile(profileEditText.getText().toString());
authorRepository.insert(author);
finish();
}
});
在我的适配器中,我有以下内容:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Author author = authors.get(position);
holder.idTextView.setText(String.valueOf(author.getId()));
holder.firstNameTextView.setText(String.valueOf(author.getFirstName()));
holder.lastNameTextView.setText(String.valueOf(author.getLastName()));
holder.emailTextView.setText(String.valueOf(author.getEmail()));
holder.universityTextView.setText(String.valueOf(author.getUniversity()));
holder.departmentTextView.setText(String.valueOf(author.getDepartment()));
holder.phoneTextView.setText(String.valueOf(author.getPhone()));
holder.mobileTextView.setText(String.valueOf(author.getMobile()));
holder.profileTextView.setText(String.valueOf(author.getProfile()));
}
大学.java:
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import java.io.Serializable;
import androidx.annotation.NonNull;
@Entity(tableName = "university", foreignKeys = {
})
public class University implements Serializable {
@PrimaryKey(autoGenerate = true)
private Integer id;
@NonNull
private String name;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
return this.getId() == ((University) obj).getId();
}
@Override
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append(this.name).append(" ");
return buf.toString();
}
}
结果表明我正在接近我想要的,但我不知道如何实现以下目标的唯一问题:
在我的添加活动中,我希望 Spinner 只有大学的名称而不是整个对象,并且在我的适配器中,我想在用户列出作者数据时返回大学名称而不仅仅是 id,对不起这么简单问题,但我是 Android 新手,几天来一直在谷歌上寻找这样的案例,但没有运气。
解决方案
推荐阅读
- java - 写出用户输入中大写字符的数量
- flutter - Dart:const 类还是 const var?
- json - 如何使用管道和过滤器使用角度 HttpClient 服务从 json 文件中获取数据?
- machine-learning - 在 RNN 模型上计算 TIMIT 数据集的准确性
- django - Django RF - 带有 ModelViewSet 的嵌套序列化程序
- ruby - 正在使用的 ruby 版本是否确定使用哪个 openssl 版本,以及是否可以使用 TLS 版本?
- php - PHP $_GET 参数给出问题
- regex - Matlab:查找字符串模式并将其替换为随机字符串
- postgresql - 42P07:关系“AspNetRoles”已经存在
- python - django中的重定向和传递参数