Невозможно обновить RecyclerView - PullRequest
0 голосов
/ 02 июля 2018

Я не могу обновить свой RecyclerView. Пробовал каждое решение на stackoverflow, но ничего не помогает. Я попытался добавить layoutmanager в код, количество элементов в жестком коде, создал новые файлы, проверил, есть ли у меня дубликаты файлов и т. Д. Я также отладил и подтвердил, что вызывается onAttachedToRecyclerView, но getItemCount и другие, которые я перечислил в адаптер не вызывается за исключением конструктора

адаптер:

    class BaseAdapter(context: Context, val items: List<Item>) : 
    RecyclerView.Adapter<LineBoxAdapter.BaseAdapter>() {

    override fun getItemCount(): Int = items.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.textView.text = items[position].text
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
    ViewHolder {
        return ViewHolder(
            LayoutInflater.from(parent.context).inflate(
                R.layout.simple_item,
                parent,
                false
            )
        )
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textView = itemView.findViewById<TextView>(R.id.title)
    }
}

Функция, которая обновляет recyclerView:

val listView =
  LayoutInflater.from(context).inflate(R.layout.list, viewGroup, 
  false)
  val list = listView.findViewById<RecyclerView>(R.id.
  LinearLayoutManager(context)
  val adapter = BaseAdapter(context, items)
  list.adapter = adapter
  adapter.notifyDataSetChanged()

RECYCLERVIEW:

<android.support.v7.widget.RecyclerView 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/items_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:overScrollMode="never"
android:requiresFadingEdge="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />


SIMPLE_ITEM:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:orientation="horizontal">

<LinearLayout xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="25" />
</LinearLayout>

1 Ответ

0 голосов
/ 02 июля 2018

Вы должны избегать использования существующих имен классов из API.

Я опубликую свой рабочий код.

simple_item:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/text_simple_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

RecyclerAdapter:

class RecyclerAdapter(context: Context, val items: List<Item>) :
        RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {

    override fun getItemCount(): Int = items.size

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.textView.text = items[position].itemName
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
            MyViewHolder {
        return MyViewHolder(
                LayoutInflater.from(parent.context).inflate(
                        R.layout.simple_item,
                        parent,
                        false
                )
        )
    }

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textView = itemView.findViewById<TextView>(R.id.text_simple_item)
    }
}

Моя активность:

class RecyclerActivity : AppCompatActivity() {

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

        val recyler = findViewById<RecyclerView>(R.id.rv_activity_recycler)
        val list = mutableListOf(Item("Me"), Item("You"), Item("We"))
        val adapter = RecyclerAdapter(this, list)
        recyler.layoutManager = LinearLayoutManager(this)
        recyler.adapter = adapter

    }
}

Мой предмет:

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