kotlin recyclerview отображает данные родительской и дочерней таблиц sqlite - PullRequest
0 голосов
/ 29 сентября 2018

Наш вопрос касается дизайна базы данных или как просмотреть родительскую таблицу и дочернюю таблицу в виджете RicklerView?

Это представление, которое мы хотим

ПРОДУКТпомидорыавокадо

Ликерпиво

Модель таблицы Департамента выглядит следующим образом. ЭТО РОДИТЕЛЬ

class ViewDeptModel {
var idD:Int = 0
var dept:String = ""

} Модель таблицы элементов такая же, КАК РЕБЕНОК

class ViewItemModel {
var idI:Int = 0
var item:String = ""

}просмотрите данные в обзоре утилизатора, который мы подумали об использовании этой модели Как мы узнаем, когда дети, связанные с Parent (отдел), закончатся? Таким образом, следующий родитель будет отображаться со своими детьми

Если мы даем таблице Child внешний ключ, который ссылается на идентификатор Parent, это предотвращает использование JOINS и UNIONS.

Итак, смотрите For Next Loop, как 4-летний Java-код, по этой ссылке ниже ССЫЛКА

Мы немного растеряны, где разместить этот код.В ViewActivity, который отображает данные.Добавляем ли мы код сбора данных In action в ViewActivity?Казалось бы, это его собственный классМы предполагаем, что цикл For Next идет в ViewActivity.Как работает этот код, мы действительно теряемся!

@model IEnumerable<ProductUserViewModel>

foreach (var item в Model) {

@item.User.Name foreach (var product in item.Products) {@product.Name}}

Если нам нужно потерять идею третьей модели, и для следующих циклов мы будем рады выслушать

1 Ответ

0 голосов
/ 29 сентября 2018

При условии, что все данные могут быть загружены из базы данных в следующей форме:

Отдел:

data class Department(val id: Int, val title: String, val children: ArrayList<Item>)

Элемент:

data class Item(val id: Int, val title: String)

возможнорассчитать позиции отделов в списке.Например, первый отдел имеет индекс 0, второй - departments.get(0).children.size + 1 и т. Д.

Полный код:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val data = arrayListOf<Department>(
            Department(0, "Department1",
                    arrayListOf(
                            Item(0, "Item1.1"),
                            Item(1, "Item1.2"),
                            Item(3, "Item1.3")
                    )),
            Department(0, "Department2",
                    arrayListOf(
                            Item(0, "Item2.1")
                    )),
            Department(0, "Department3",
                    arrayListOf(
                            Item(0, "Item3.1"),
                            Item(1, "Item3.2")
                    )),
            Department(0, "Department4",
                    arrayListOf(
                            Item(0, "Item4.1"),
                            Item(1, "Item4.2"),
                            Item(1, "Item4.3")
                    ))
    )

    recycler_view.layoutManager = LinearLayoutManager(this)
    recycler_view.adapter = Adapter(this, data)

}
}

class Adapter(val context: Context, val list: ArrayList<Department>): RecyclerView.Adapter<VH>() {

var total: Int = 0
var sectionIndices: ArrayList<Int> = arrayListOf()
var sectionSizes: ArrayList<Int> = arrayListOf()

init{
    var index = 0
    var pos = 0
    for (d in list){
        sectionIndices.add(pos)
        sectionSizes.add(d.children.size)
        pos += (1 + d.children.size)
        index += 1
    }
    total = pos
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
    val view = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false)
    return VH(view)
}

override fun getItemCount(): Int {
    return total
}

override fun onBindViewHolder(holder: VH, position: Int) {
    for (section in 0 .. sectionIndices.size - 1){
        if (position >= sectionIndices.get(section)
                && position <= sectionIndices.get(section) + sectionSizes.get(section)){
            val i = position - sectionIndices.get(section)
            when (i){
                0 -> {
                    // department
                    val department = list.get(section)
                    holder.textView.typeface = Typeface.DEFAULT_BOLD
                    holder.textView.text = department.title
                }
                else -> {
                    // item
                    val item = list.get(section).children.get(i - 1)
                    holder.textView.typeface = Typeface.DEFAULT
                    holder.textView.text = item.title
                }
            }
            break
        }
    }
}
}

class VH(val view: View): RecyclerView.ViewHolder(view){

val textView: TextView
init {
    textView = view.findViewById(android.R.id.text1)
}

}

data class Department(val id: Int, val title: String, val children: ArrayList<Item>)

data class Item(val id: Int, val title: String)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...