Мы пытаемся создать вложенный вид переработчика, мы получаем идею, что используются ДВЕ адаптера.Чего мы не понимаем, так это построения источника данных.Мы используем БД SQLite для источника данных.Наш дизайн - это родительское текстовое поле, которое описывает отдел в продуктовом магазине.Например, «Производство и ликер с детьми». В этих отделах есть помидоры, авокадо и пиво.Если мы используем две модели и две таблицы БД, как мы связываем дочерние элементы с отделами?Мы подумали об одной Таблице БД с этой записью формата 1 Произведите запись томатов 2 Нулевая запись авокадо 3 Ликерное пиво.Это кажется не таким умным.Итак, затем мы подумали о вызове JOINS или UNION, чтобы сделать одну новую таблицу из наших двух таблиц, одну с Dept, а другую - с элементами.Как бы мы выложили две таблицы, чтобы они связывали позиции с соответствующими отделами?Мы также предполагаем, что наш ViewHolder должен быть собственным классом, который взаимодействует с родительским и дочерним адаптерами.Мы опубликуем фото дизайна, который мы пытаемся подражать (копия)Наши вопросы, как разработать таблицы БД?Нужен ли нам класс ViewHolder, который взаимодействует с двумя адаптерами?Как создать две таблицы и какой тип JOIN вызывать для создания новой таблицы?
Мы смотрели на эту ссылку, и идея отличная, но его код неимеют один и тот же источник данных.Одна дата, другая может быть SQLite Kotlin Nested
ОК, у нас есть рабочая БД, и два адаптера DeptAdapter и ItemAdapter работают НО не одновременно.Две таблицы DEPT_TABLE и ITEM_TABLE содержат данныеПредставление для двух таблиц отображается в ListActivity вместе с activity_list.xml.ListActivity НЕ МОЖЕТ предоставлять оба представления таблицы одновременноЧто мы считаем неправильным, так это то, что не указано, что созданное в recyclerview_dept.xml представление recycler не задействовано, а все виды работ и представлений предоставляются представлением recycler в activity_list.xml с идентификатором rvListActivity.
код выложен ниже с ОДИН ВОПРОС
class ListActivity : AppCompatActivity() {
private var RecyclerAdapter: DeptAdapter? = null
private var RecyclerAdapter2:ItemAdapter? =null
private var recyclerView: RecyclerView? = null
private var recyclerView2: RecyclerView? = null
private val db = DBHelper(this)
private var deptList:List<DEPT> = ArrayList()
private var itemList:List<ITEM> = ArrayList()
private var linearLayoutManager: LinearLayoutManager? = null
private var linearLayoutManager2: LinearLayoutManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list)
initViews()
}// end onCreate
override fun onResume() {
super.onResume()
initDB()
}
// This is ONLY called when Activity is in onResume state
private fun initDB() {
deptList = db.queryAllDEPT()
//itemList = db.queryAllITEM()
if(deptList.isEmpty()){
title = "No Records in DB"
}else{
title = "Contact List"
}
println("########################################### onSTART")
RecyclerAdapter = DeptAdapter(deptList = deptList, context = applicationContext)
//RecyclerAdapter2 = ItemAdapter(itemList = itemList, context = applicationContext)
(recyclerView as RecyclerView).adapter = RecyclerAdapter
//(recyclerView2 as RecyclerView).adapter = RecyclerAdapter2
}
private fun initViews() {
recyclerView = this.findViewById(R.id.rvListActivity)
RecyclerAdapter = DeptAdapter(deptList = deptList, context = applicationContext)
linearLayoutManager = LinearLayoutManager(applicationContext)
(recyclerView as RecyclerView).layoutManager = linearLayoutManager!!
//recyclerView2 = this.findViewById(R.id.rvListActivity)
//RecyclerAdapter2 = ItemAdapter(itemList = itemList, context = applicationContext)
//linearLayoutManager2 = LinearLayoutManager(applicationContext)
//(recyclerView2 as RecyclerView).layoutManager = linearLayoutManager2!!
}
XML-файл для указанной выше операции
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rvListActivity"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</android.support.v7.widget.RecyclerView>
XML-файл сдополнительный обзор переработчика
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:id="@+id/list_new_card">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvDEPT"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:gravity="center_vertical"
android:text="I am tv tvDept"
android:textColor="@color/color_Black"
android:textSize="18sp"
android:textStyle="bold" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rvDEPT"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</android.support.v7.widget.CardView>
Оба адаптера
class DeptAdapter(deptList:List<DEPT>,internal var context: Context):RecyclerView.Adapter<DeptAdapter.DeptViewHolder>() {
private var deptList:List<DEPT> = ArrayList()
init{this.deptList = deptList}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DeptViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.recyclerview_dept,parent,false)
return DeptViewHolder(view)
}
override fun getItemCount(): Int {
return deptList.size
}
override fun onBindViewHolder(holder: DeptViewHolder, position: Int) {
val items = deptList[position]
holder.item.text = items.dept
}
inner class DeptViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var item: TextView = view.findViewById(R.id.tvDEPT) as TextView
}
}
Дочерний адаптер, если вы будете
class ItemAdapter(itemList:List<ITEM>,var context: Context):RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {
private var itemList:List<ITEM> = ArrayList()
init{this.itemList = itemList}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.recyclerview_item,parent,false)
return ItemViewHolder(view)
}
override fun getItemCount(): Int {
return itemList.size
}
override fun onBindViewHolder(holder:ItemViewHolder, position: Int) {
val items = itemList[position]
holder.item.text = items.gitem
}
inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var item: TextView = view.findViewById(R.id.tvITEM) as TextView
}
}
Table Design - это простой идентификатор и строка как в отдельных моделях.
Наш вопрос, как отобразить обе таблицы в ListActivity?