Android Kotlin:未连接适配器;跳过布局:RecyclerView
我正试图在我的kotlin代码中实现Recyclerview。。。。 我正在使用改造从webservice获取数据,并将其绘制到回收器视图中 MainActivity.classAndroid Kotlin:未连接适配器;跳过布局:RecyclerView,android,kotlin,retrofit,android-recyclerview,Android,Kotlin,Retrofit,Android Recyclerview,我正试图在我的kotlin代码中实现Recyclerview。。。。 我正在使用改造从webservice获取数据,并将其绘制到回收器视图中 MainActivity.class class MainActivity : AppCompatActivity() { internal lateinit var jsonApi:MyAPI private val compositeDisposable = CompositeDisposable() lateinit var recyclerVie
class MainActivity : AppCompatActivity() {
internal lateinit var jsonApi:MyAPI
private val compositeDisposable = CompositeDisposable()
lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recycler_drivers)
// init API
val retrofitt = RetrofitClient.instance
if (retrofitt != null) {
jsonApi = retrofitt.create(MyAPI::class.java)
}
//View
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this)
fetchData()
}
private fun fetchData() {
compositeDisposable.add(jsonApi.drivers
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{drivers->displayData(drivers)}
)
}
private fun displayData(drivers: List<Driver>?) {
val adapter = DriverAdapter(this,drivers!!)
recycler_drivers.adapter = adapter
}
class DriverViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val txt_driver_number = itemView.txt_driver_number
val txt_first_name = itemView.txt_first_name
val txt_ph_number = itemView.txt_ph_number
}
这是API接口
interface MyAPI {
@get:GET("data")
val drivers:Observable<List<Driver>>
}
这是模型类,它基本上是来自本地主机服务器的数据
class Driver {
var driver_number: String = ""
var first_name: String = ""
var ph_number: Int = 0
}
正如你所看到的,我已经为Recycleview连接了一个适配器。那么,为什么我总是犯这个错误呢
我已经阅读了与同一问题相关的其他问题,但没有任何帮助。我认为您看到这个问题是因为通过改造查询web服务的异步性质。直到
onCreate
退出后,才实际分配RecyclerView.Adapter
尝试将RecyclerView的可视性更改为
Gone
,直到适配器应用于displayData
,然后将其设置为Visible在displayData()中构建RecyclerView
您需要在适配器中公开一个方法来设置数据setDrivers()
类驱动程序(内部变量上下文:上下文):
RecyclerView.Adapter()
{
val drivers=mutableListOf()
...
乐趣设置驱动程序(驱动程序:可变列表){
这个.drivers=drivers
notifyDataSetChanged()
}
}
这将摆脱您的无适配器连接;跳过布局:RecyclerView
错误您可能没有到达.subscribe()
您实际连接适配器的位置,您可以在那里记录一些内容以确保您到达它吗?添加适配器后是否可以尝试连接布局管理器?@Rafa它没有到达subscribe()
,你觉得我错过了什么朋友?@Rafa我需要分享更多的内容吗。。。比如说,改造客户机
是的,请这样做,我认为这无关紧要。不需要在onCreate()中设置适配器。
object RetrofitClient {
private var ourInstance : Retrofit? = null
var instance: Retrofit? = null
get(){
if(ourInstance == null){
ourInstance = Retrofit.Builder()
.baseUrl("http://localhost/BSProject/public/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
return ourInstance!!
}
}
class Driver {
var driver_number: String = ""
var first_name: String = ""
var ph_number: Int = 0
}
private fun displayData(drivers: MutableList<Driver>?) {
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this)
val adapter = DriverAdapter(this,drivers!!)
recycler_drivers.adapter = adapter
}
class MainActivity: {
lateinit var driverAdapter: DriverAdapter
protected void onCreate() {
...
recyclerView = findViewById(R.id.recycler_drivers)
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this)
val adapter = DriverAdapter(this)
recycler_drivers.adapter = adapter
}
private fun displayData(drivers: List<Driver>?) {
driverAdapter.setDrivers(drivers)
}
class DriverAdapter(internal var contex:Context):
RecyclerView.Adapter<DriverViewHolder>()
{
val drivers = mutableListOf()
...
fun setDrivers(drivers: MutableList<Driver>) {
this.drivers = drivers
notifyDataSetChanged()
}
}