Как я могу исправить ошибку 'java.lang.IllegalStateException: RecyclerView не должен быть нулевым' - PullRequest
0 голосов
/ 15 мая 2019

У меня есть реселлер ViewView, куда я отправляю данные с моего адаптера, но получил ошибку

RecyclerView must not be null

код с моим adpater:

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

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Для вашего LinearLayoutManager Фрагменты не расширяют контекст, поэтому вы не можете использовать this в качестве параметров.Вместо этого используйте это:

waitingRecyclerView.layoutManager = LinearLayoutManager(context!!)

Для ошибки времени выполнения «RecyclerView не должен быть нулевым», это потому, что вы получаете доступ к свойствам waitingRecyclerView внутри обратного вызова onCreateView.Макет еще не был инициализирован.Вы можете переместить инициализацию waitingRecyclerView в обратный вызов onViewCreated.

Если вам нужно инициализировать waitingRecyclerView внутри onCreateView, вы можете получить доступ к waitingRecyclerView через объект, который вы создали при накачке макетат.е. inflate:

inflate.waitingRecyclerView.layoutManager = LinearLayoutManager(context!!)
inflate.waitingRecyclerView.adapter = adapter
0 голосов
/ 15 мая 2019

Вы должны изменить LinearLayoutManager(this) на LinearLayoutManager(this.context)

...