У меня есть фрагмент с адаптером. Я использую модификацию для извлечения данных из Интернета
мое издевательство
class MyTransactionFragment : Fragment() { val disposable = CompositeDisposable() var transactionDetailList:ArrayList<TransactionData>? = null private var mApiSocket: ApiSocket? = null private var mRecyclerView:RecyclerView? = null var adapter:TransactionAdapter? = null companion object { val TAG = ItemFragment::class.java.simpleName!! fun newInstance(transactionPojo: TransactionPojo): MyTransactionFragment { val fragment = MyTransactionFragment() val args = Bundle() args.putSerializable(Constants.TRANSACTIONS, transactionPojo) fragment.arguments = args return fragment } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_my_transaction, container, false) mApiSocket = Utils().getApiSocket(activity!!) val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false) view.mRecyclerViewTransaction.layoutManager = layoutManager view.mRecyclerViewTransaction.setHasFixedSize(true) if (arguments!=null && arguments!!.getSerializable(Constants.TRANSACTIONS) != null){ val transactionPojo = arguments!!.getSerializable(Constants.TRANSACTIONS) as TransactionPojo transactionDetailList = ArrayList(transactionPojo.transactions.data) adapter = TransactionAdapter(transactionDetailList, activity!!,disposable) view.mRecyclerViewTransaction.adapter = adapter mRecyclerView = view.mRecyclerViewTransaction val scrollListener = object : EndlessRecyclerViewScrollListener(layoutManager) { override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView) { disposable.add(mApiSocket!!.transaction(""+page+1) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(MyTransactionFragment()::onResponse,MyTransactionFragment()::onError)) } } view.mRecyclerViewTransaction.addOnScrollListener(scrollListener) } return view } private fun onResponse(transactionPojo: TransactionPojo){ transactionDetailList = ArrayList(transactionPojo.transactions.data) adapter!!.addData(transactionDetailList) //here adapter variable gets null Why } fun onError(e: Throwable) { Log.e("TransactionFragment", e.toString()) if (e is NoNetWorkException) { Utils().showSnackBar(activity!!, "No Network connection") } else Utils().showSnackBar(activity!!, "Something went wrong please try again later") Utils().hideProgress() } override fun onDetach() { super.onDetach() disposable.dispose() } }
В этой переменной адаптера в onResponse получает null Почему?
Последнее, что я нашел
Фактически я MyTransactionFragment()::onResponse
в подписчике. что означает, что я помещаю результат в новый экземпляр MyTransactionFragment
. Поэтому я изменил это на
disposable.add(mApiSocket!!.transaction(""+page+1) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(::onResponse,::onError))