Всем доброе утро! Надеюсь, у вас все хорошо.
Я работаю с базой данных комнат с двумя таблицами или объектами и хочу отобразить список всех курсов, пройденных студентом, в ресайклере. Просмотр с помощью разбиения по страницам библиотекарь. В методе bind() адаптера, когда я впервые использовал привязку.courseName.text = StudentCourse.courses.courseName.toString(), чтобы увидеть результат после сохранения четырех курсов в базе данных. и имя студента, прошедшего эти курсы, он возвращает такой массив:
**[Course(courseName=Android, CourseDuration=50), Course(courseName=Python, CourseDuration=40), Course(courseName=Kotlin, CourseDuration=36), Course(courseName=English, CourseDuration=25)]
Приведенный ниже код возвращает только один курс с его имя и продолжительность в представлении переработчика, и это последний курс массива.
Две таблицы или сущности: Курс и Студент определяются следующим образом:
@Entity(tableName = "course_table")
data class Course(
@PrimaryKey(autoGenerate = false)
val courseName : String,
@ColumnInfo(name = "course_duration")
val courseDuration : String
)
@Entity(tableName = "student_table")
data class Student(
@PrimaryKey(autoGenerate = false)
val studentName : String,
val semester : Int,
val schoolName : String
)
Отношения между этими двумя классами представлены классами StudentAndCourse и CourseAndStudent**, определяемыми следующим образом:
data class StudentAndCourse(
@Embedded
val student : Student,
@Relation(
parentColumn = "studentName",
entityColumn = "courseName",
associateBy = Junction(StudentAndCourseTogether::class)
)
val courses : List
)
data class CourseAndStudent(
@Embedded
val course : Course,
@Relation(
parentColumn = "courseName",
entityColumn = "studentName",
associateBy = Junction(StudentAndCourseTogether::class)
)
val students : List
)
Запрос, который я определил в Dao, чтобы получить все курсы, пройденные конкретным студентом, указанным по его имени:
@Query("SELECT * FROM student_table WHERE studentName = :studentName")
fun getAllCoursesByStudentName(studentName: String) : PagingSource```
Here is my Paging Adapter class:
class CourseByStudentNameAdapter:
PagingDataAdapter(DiffCallback) {
class CourseByStudentNameViewHolder(private val binding: CourseByStudentNameItemBinding) :
RecyclerView.ViewHolder(binding.root){
fun bind(studentAndCourse: StudentAndCourse){
for (course in studentAndCourse.courses){
binding.courseName.text = course.courseName
binding.courseDuration.text = course.courseDuration
}
}
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
): CourseByStudentNameAdapter.CourseByStudentNameViewHolder {
val inflatedLayout = CourseByStudentNameItemBinding.inflate(LayoutInflater.from(
parent.context), parent, false)
return CourseByStudentNameViewHolder(inflatedLayout)
}
override fun onBindViewHolder(holder: CourseByStudentNameAdapter.CourseByStudentNameViewHolder, position: Int) {
val currentCourse = getItem(position)
if (currentCourse != null) {
holder.bind(currentCourse)
}
}
companion object DiffCallback : DiffUtil.ItemCallback(){
override fun areItemsTheSame(
oldItem: StudentAndCourse,
newItem: StudentAndCourse
): Boolean = oldItem.courses == newItem.courses
override fun areContentsTheSame(
oldItem: StudentAndCourse,
newItem: StudentAndCourse
): Boolean = oldItem == newItem
}
}```
Мой XML-файл, содержащий элементы:
```
My fragment code:
```
@AndroidEntryPoint
class AllCourseByStudentNameFragment : Fragment() {
private var _binding : FragmentAllCourseByStudentNameBinding? = null
private val binding get() = _binding!!
private val viewModel : SchoolViewModel by activityViewModels()
private lateinit var adapter : CourseByStudentNameAdapter
private val schoolName = "IFRI"
private val studentName = "Esperant"
private val courseName = "Android"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
// Inflate the layout for this fragment
_binding = FragmentAllCourseByStudentNameBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = CourseByStudentNameAdapter()
binding.apply {
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(requireContext())
recyclerView.setHasFixedSize(true)
}
viewModel.setName(studentName)
viewModel.courseByStudentName.observe(viewLifecycleOwner){
adapter.submitData(viewLifecycleOwner.lifecycle, it)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}```
I will be very glad to get your help. Thanks in advance.
Подробнее здесь: https://stackoverflow.com/questions/715 ... ing-paging
Как я могу отображать каждый элемент из массива списка в RecyclerView, используя библиотеку подкачки? ⇐ Android
Форум для тех, кто программирует под Android
1727437176
Anonymous
Всем доброе утро! Надеюсь, у вас все хорошо.
Я работаю с базой данных комнат с двумя таблицами или объектами и хочу отобразить список всех курсов, пройденных студентом, в ресайклере. Просмотр с помощью разбиения по страницам библиотекарь. В методе [b]bind()[/b] адаптера, когда я впервые использовал привязку.courseName.text = StudentCourse.courses.courseName.toString(), чтобы увидеть результат после сохранения четырех курсов в базе данных. и имя студента, прошедшего эти курсы, он возвращает такой массив:
**[Course(courseName=Android, CourseDuration=50), Course(courseName=Python, CourseDuration=40), Course(courseName=Kotlin, CourseDuration=36), Course(courseName=English, CourseDuration=25)]
Приведенный ниже код возвращает только один курс с его имя и продолжительность в представлении переработчика, и это последний курс массива.
Две таблицы или сущности: [b]Курс[/b] и [b]Студент[/b] определяются следующим образом:
@Entity(tableName = "course_table")
data class Course(
@PrimaryKey(autoGenerate = false)
val courseName : String,
@ColumnInfo(name = "course_duration")
val courseDuration : String
)
@Entity(tableName = "student_table")
data class Student(
@PrimaryKey(autoGenerate = false)
val studentName : String,
val semester : Int,
val schoolName : String
)
Отношения между этими двумя классами представлены классами [b]StudentAndCourse[/b] и CourseAndStudent**, определяемыми следующим образом:
data class StudentAndCourse(
@Embedded
val student : Student,
@Relation(
parentColumn = "studentName",
entityColumn = "courseName",
associateBy = Junction(StudentAndCourseTogether::class)
)
val courses : List
)
data class CourseAndStudent(
@Embedded
val course : Course,
@Relation(
parentColumn = "courseName",
entityColumn = "studentName",
associateBy = Junction(StudentAndCourseTogether::class)
)
val students : List
)
Запрос, который я определил в Dao, чтобы получить все курсы, пройденные конкретным студентом, указанным по его имени:
@Query("SELECT * FROM student_table WHERE studentName = :studentName")
fun getAllCoursesByStudentName(studentName: String) : PagingSource```
Here is my Paging Adapter class:
class CourseByStudentNameAdapter:
PagingDataAdapter(DiffCallback) {
class CourseByStudentNameViewHolder(private val binding: CourseByStudentNameItemBinding) :
RecyclerView.ViewHolder(binding.root){
fun bind(studentAndCourse: StudentAndCourse){
for (course in studentAndCourse.courses){
binding.courseName.text = course.courseName
binding.courseDuration.text = course.courseDuration
}
}
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
): CourseByStudentNameAdapter.CourseByStudentNameViewHolder {
val inflatedLayout = CourseByStudentNameItemBinding.inflate(LayoutInflater.from(
parent.context), parent, false)
return CourseByStudentNameViewHolder(inflatedLayout)
}
override fun onBindViewHolder(holder: CourseByStudentNameAdapter.CourseByStudentNameViewHolder, position: Int) {
val currentCourse = getItem(position)
if (currentCourse != null) {
holder.bind(currentCourse)
}
}
companion object DiffCallback : DiffUtil.ItemCallback(){
override fun areItemsTheSame(
oldItem: StudentAndCourse,
newItem: StudentAndCourse
): Boolean = oldItem.courses == newItem.courses
override fun areContentsTheSame(
oldItem: StudentAndCourse,
newItem: StudentAndCourse
): Boolean = oldItem == newItem
}
}```
Мой XML-файл, содержащий элементы:
```
My fragment code:
```
@AndroidEntryPoint
class AllCourseByStudentNameFragment : Fragment() {
private var _binding : FragmentAllCourseByStudentNameBinding? = null
private val binding get() = _binding!!
private val viewModel : SchoolViewModel by activityViewModels()
private lateinit var adapter : CourseByStudentNameAdapter
private val schoolName = "IFRI"
private val studentName = "Esperant"
private val courseName = "Android"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
// Inflate the layout for this fragment
_binding = FragmentAllCourseByStudentNameBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = CourseByStudentNameAdapter()
binding.apply {
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(requireContext())
recyclerView.setHasFixedSize(true)
}
viewModel.setName(studentName)
viewModel.courseByStudentName.observe(viewLifecycleOwner){
adapter.submitData(viewLifecycleOwner.lifecycle, it)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}```
I will be very glad to get your help. Thanks in advance.
Подробнее здесь: [url]https://stackoverflow.com/questions/71526306/how-can-i-display-each-item-from-an-array-of-list-in-a-recyclerview-using-paging[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия