kotlin nested recyclerview добавить данные - PullRequest
0 голосов
/ 25 сентября 2018

Мы пытаемся создать вложенный вид переработчика, мы получаем идею, что используются ДВЕ адаптера.Чего мы не понимаем, так это построения источника данных.Мы используем БД SQLite для источника данных.Наш дизайн - это родительское текстовое поле, которое описывает отдел в продуктовом магазине.Например, «Производство и ликер с детьми». В этих отделах есть помидоры, авокадо и пиво.Если мы используем две модели и две таблицы БД, как мы связываем дочерние элементы с отделами?Мы подумали об одной Таблице БД с этой записью формата 1 Произведите запись томатов 2 Нулевая запись авокадо 3 Ликерное пиво.Это кажется не таким умным.Итак, затем мы подумали о вызове JOINS или UNION, чтобы сделать одну новую таблицу из наших двух таблиц, одну с Dept, а другую - с элементами.Как бы мы выложили две таблицы, чтобы они связывали позиции с соответствующими отделами?Мы также предполагаем, что наш ViewHolder должен быть собственным классом, который взаимодействует с родительским и дочерним адаптерами.Мы опубликуем фото дизайна, который мы пытаемся подражать (копия)Наши вопросы, как разработать таблицы БД?Нужен ли нам класс ViewHolder, который взаимодействует с двумя адаптерами?Как создать две таблицы и какой тип JOIN вызывать для создания новой таблицы? Nested Layout

Мы смотрели на эту ссылку, и идея отличная, но его код неимеют один и тот же источник данных.Одна дата, другая может быть 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?

1 Ответ

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

Так что это действительно ловкий код.Одна проблема, я еще не привязал его к БД SQLite.Когда у меня будет время подключить его к БД, я опубликую обновление.У вас было несколько правильных двух адаптеров, это просто необходимоИ список в списке используется здесь, добавляя ChildModel в ParentModel как List<ChildModel>Этот код принадлежит Navendra Jha

Вам нужно будет сделать небольшую манипуляцию, так как он думал, что было бы забавно, чтобы дети прокручивали влево и вправо независимо от родителя, поэтому в MainActivity, котораяотображает данные изменяют эту строку с горизонтальной на вертикальную

layoutManager = LinearLayoutManager(this@MainActivity, LinearLayout.VERTICAL, false)

Навендра Джа использовал ImageView в своем коде, мы прокомментировали это, как только поняли, что происходит под капотом.Это ДЕЙСТВИТЕЛЬНО супер заряженный полнофункциональный отличный код, который каждый разработчик Kotlin захочет в своем / его наборе инструментов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...