Адаптер утилизатора не обновляется при вызове notifydatasetchanged () - PullRequest
0 голосов
/ 31 октября 2019

Я передал список адаптеру из действия и при вызове notifydatasetchanged , представление рециркулятора все еще пусто, оно не обновляет представление.

    var list : ArrayList<StationBean> = ArrayList()
    override fun getItemCount(): Int {
        return list.size
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(context).inflate(R.layout.stations_adapter, parent, false))
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.stationsName.text = list.get(position).stationName
        holder.cityName.text = list.get(position).latitude.toString()
    }
    fun add_data(data : StationsListDataClass)
    {
           list = data.stationBeanList
           notifyDataSetChanged()
           Log.d("List", list.toString())
    }
}

//////. Установка адаптера.

  private var adapter: StationsListAdapter = StationsListAdapter(this)
   recycler_view_stationsList.apply {

            layoutManager = LinearLayoutManager(this.context)
            this.adapter = adapter
        }

///// Файл макета

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view_stationsList"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        />

//. Основное действие Полный код, я использовал инжект для вызова докладчика. Основная проблема в функции setRecycler

 @Inject
    lateinit var stationsListPresenter: StationsListPresenter
    private lateinit var station_adapter: StationsListAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_stations_list)
       setupRecycler()
        stationsListPresenter.downLoadStationsListUsingRetrofit()
    }

    private fun setupRecycler()
    {
        val recyclerView : RecyclerView = findViewById(R.id.recycler_view_stations_list)
        recyclerView.apply {
            layoutManager = LinearLayoutManager(this@StationsListActivity) // replace MainActivity with your activity name
            station_adapter = StationsListAdapter(this@StationsListActivity)
        }

            recyclerView.adapter = station_adapter

    }


    override fun addNewsToRecyclerView(stationsList: StationsListDataClass)
    {
        station_adapter.add_data(stationsList)


    }
    override fun makeInjection(activityComponent: ActivityComponent) {

        activityComponent.inject(this)
    }

Вид остается пустым после вызова notifydatasetchanged (), и я не получаю никакой ошибки. В списке около 800 объектов. Представление Recycler показывает исключение нулевого указателя, даже после просмотра привязки с использованием findviewbyID

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

И измените вашу add_data функцию следующим образом

fun add_data(data : StationsListDataClass){
     list.clear()
     list.addAll(data.stationBeanList)
     notifyDataSetChanged()
     Log.d("List", list.toString())
}

Обновите

Измените setupRecycler, как показано ниже

private fun setupRecycler(){
    var recyclerView = findViewById(R.id.recycler_view_stations_list)

    station_adapter = StationsListAdapter(this@StationsListActivity)
    val layoutManager = LinearLayoutManager(this@StationsListActivity)

    recyclerView?.layoutManager = layoutManager
    recyclerView?.adapter = station_adapter
}
0 голосов
/ 31 октября 2019

Пожалуйста, опубликуйте свой XML-макет и / или настройте код представления переработчика. Может быть, не установлен LayoutManager. Вы можете установить его в xml или в упражнении / фрагменте:

recyclerView.setLayoutManager(new LinearLayoutManager(this));

, также попробуйте очистить свой список в add_data ()

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