【问题标题】:How can i fix the error 'java.lang.IllegalStateException: RecyclerView must not be null'如何修复错误“java.lang.IllegalStateException:RecyclerView 不得为空”
【发布时间】:2019-05-15 14:59:42
【问题描述】:

我有一个 recyclerView,我用我的适配器发送数据但收到错误

RecyclerView must not be null

用我的适配器编码:

class InWaitingFragment : Fragment() {

    private lateinit var adapter: FastItemAdapter<BarterWaitingItem>

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?

    ): View? {

        println("CONTAINER:  " + container)

        val inflate: FrameLayout = inflater.inflate(R.layout.fragment_in_waiting, container, false) as FrameLayout

        adapter = FastItemAdapter<BarterWaitingItem>()

       waitingRecyclerView.layoutManager = LinearLayoutManager(this)

       waitingRecyclerView.adapter = adapter

        val retrofit = Retrofit.Builder()
            .baseUrl("http://10.93.182.95:8888")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        val service = retrofit.create(RequestManager::class.java)

        val action  = service.getPending()


        action.enqueue(object: Callback<ArrayList<GetBarterResponse>> {
            override fun onResponse(
                call: Call<ArrayList<GetBarterResponse>>,
                response: Response<ArrayList<GetBarterResponse>>
            ) {
                val allBarter = response.body()
                if(allBarter != null){
                    for (c in allBarter){
                        println("OBJET: ${c.buyer_object.title}")
                    }

                    println("ONRESPONSE En attente: " + response.body().toString())
                }
            }

            override fun onFailure(call: Call<ArrayList<GetBarterResponse>>, t: Throwable) {
                println("ONFAILURE En attente: " + t.toString())
            }
        })

        return inflate
    }


}

LinearLayoutManager(this) 的这个错误,说:

`require:Context!
 Founds: InWaitingFragment

【问题讨论】:

    标签: kotlin android-recyclerview linearlayoutmanager


    【解决方案1】:

    您应该将LinearLayoutManager(this) 更改为LinearLayoutManager(this.context)

    【讨论】:

      【解决方案2】:

      对于您的 LinearLayoutManager,Fragments 没有扩展 Context,因此您不能使用 this 作为参数。相反,使用这个:

      waitingRecyclerView.layoutManager = LinearLayoutManager(context!!)
      

      对于运行时错误,“RecyclerView 不能为空”,这是因为您正在访问 onCreateView 回调中的 waitingRecyclerView 的属性。布局尚未初始化。您可以将 waitingRecyclerView 的初始化移动到“onViewCreated”回调中。

      如果您必须在onCreateView 中初始化waitingRecyclerView,您可以通过膨胀布局时创建的对象访问waitingRecyclerView,即inflate

      inflate.waitingRecyclerView.layoutManager = LinearLayoutManager(context!!)
      inflate.waitingRecyclerView.adapter = adapter
      

      【讨论】:

        猜你喜欢
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2012-07-27
        • 2021-03-10
        • 1970-01-01
        • 2021-09-07
        相关资源
        最近更新 更多