尝试通过ID

时间:2018-06-03 13:33:26

标签: android android-recyclerview kotlin

我是Android开发人员的新手,我遇到了麻烦...... 我试图在我的活动类中获得对recyclerview的引用,并且由于某种原因它返回null?我在onCreate中调用了findViewById函数。我已经在某些地方读过,这是为了尽早调用,因为还没有创建recyclelerview,我应该使用onCreated。但是当我使用onCreated函数时,我得到一个错误,指出它没有覆盖任何东西。

我正在使用Kotlin,所以我尝试过使用和不使用null运算符(?) 但是我仍然得到同样的错误?有没有办法解决?我正在使用min 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 :(得分:0)

setupRecyclerView

之后调用setContentView方法