Recyclerview null при попытке получить по идентификатору - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в разработке для Android и столкнулся с проблемой ... Я пытаюсь получить ссылку на просмотрщик в своем классе активности, и он по какой-то причине возвращает ноль?Я вызываю функцию findViewById в onCreate.Я читал в некоторых местах, что это рано называть, так как просмотрщик еще не был создан, и я должен использовать onCreated.Однако, когда я использую функцию onCreated, я получаю сообщение о том, что она ничего не переопределяет.

Я использую Kotlin, поэтому я пробовал как с нулевым оператором, так и без него (?), Но все равно получаю ту же ошибку?Есть ли способ обойти это?Я использую мин SDK версии 21 и целевую версию ADK 27 (не уверен, что это нужно?)

Спасибо за ваше время!

Класс активности

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

    Application.component.inject(this)
    viewModel = itemListViewModel(this, authService, itemService)
    var response = viewModel.getItemsList()

    itemList = response?.itemList!!

    setupRecyclerView()
}

fun setupRecyclerView(){

    var recyclerview = findViewById<RecyclerView>(R.id.item_list)
    var recyclerAdaptor = VenueListAdaptor(this, itemList)
    recyclerview.adapter = recyclerAdaptor

    var verticalManager = LinearLayoutManager(this)
    verticalManager.orientation = LinearLayoutManager.VERTICAL
    recyclerview.layoutManager = verticalManager

    recyclerview.itemAnimator = DefaultItemAnimator()
}

** XML Layout **

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/item_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>

** Класс адаптера **

class ItemListAdaptor (context: Context, itemList: ArrayList<Item>) :     RecyclerView.Adapter<ItemListAdaptor.ItemListViewHolder>() {

val itemList = itemList
val layoutInflator = LayoutInflater.from(context)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):     ItemListViewHolder {
    val view = layoutInflator.inflate(R.layout.item_layout, parent, false)
    val viewholder = ItemListViewHolder(view)
    return viewholder
}

override fun getItemCount(): Int {
   return itemList.size
}

override fun onBindViewHolder(holder: itemListViewHolder, position: Int) {
    val data = itemList.get(position)
    holder.setData(data, position)
}

class ItemListViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView)
{
    lateinit var itemName: TextView
    lateinit var item: Item

    init{
        if(itemView != null){
            // find item and set data here
        }
    }

    fun setData(item: Item, position : Int){
        //set item data here
    }
}

}

1 Ответ

0 голосов
/ 03 июня 2018

Вызов setupRecyclerView метод сразу после setContentView

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