Kotlin 错误lateinit属性适配器从活动返回后尚未初始化

Kotlin 错误lateinit属性适配器从活动返回后尚未初始化,kotlin,adapter,searchview,Kotlin,Adapter,Searchview,我对这个代码有问题。在为SearchView添加代码之后,每次我单击一个元素转到StoreActivity时,当我返回时,我都会收到错误消息 kotlin.UninitializedPropertyAccessException:lateinit属性适配器尚未初始化 在行 适配器.filter.filter(新文本) 如何解决此错误?我不明白 class HomeFragment : BaseFragment() { private lateinit var adapter: MySt

我对这个代码有问题。在为SearchView添加代码之后,每次我单击一个元素转到StoreActivity时,当我返回时,我都会收到错误消息

kotlin.UninitializedPropertyAccessException:lateinit属性适配器尚未初始化

在行

适配器.filter.filter(新文本)

如何解决此错误?我不明白

class HomeFragment : BaseFragment() {

    private lateinit var adapter: MyStoreRecyclerViewAdapter
    private var stores: List<StoreRealm> = ArrayList()

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

        return inflater.inflate(R.layout.fragment_home, container, false)
    }

    override fun onResume() {
        super.onResume()
        setHasOptionsMenu(true)

        if (isAdded) {
            val systemService = this.context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
            BLocationManager(this.context).getLocation {
                loadHome()
                if (!systemService.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                    showEnableGpsDialog()
                } else {
                    gpsWarning.visibility = View.GONE
                }
            }
        }
    }

    override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
        inflater?.inflate(R.menu.search_store, menu)
        val search: MenuItem = menu!!.findItem(R.id.searchStore)
        val searchView: SearchView = search.actionView as SearchView
        search(searchView)
        searchView.maxWidth = Int.MAX_VALUE

        super.onCreateOptionsMenu(menu, inflater)
    }

    private fun loadHome() {
        loading_spinner?.visibility = View.VISIBLE
        StoreService.getStores(
            AuthManager.getMe()?.id!!, 0, BLocationManager.lat, BLocationManager.lon
        ) { response ->
            loading_spinner?.visibility = View.GONE
            if (response.getResult() != null && response.getResult()?.isNotEmpty()!!) {
                no_data_view?.visibility = View.GONE
                store_view?.visibility = View.VISIBLE

                stores = response.getResult()!!
                // set up the RecyclerView
                val recyclerView = view.store_recycler
                recyclerView.layoutManager = GridLayoutManager(this.context, 1)
                adapter = MyStoreRecyclerViewAdapter(stores) {
                    val intent = Intent(this.context, StoreActivity::class.java)
                    intent.putExtra("store_id", it.id)
                    startActivity(intent)
                }
                recyclerView.adapter = adapter
            } else {
                no_data_view?.visibility = View.VISIBLE
                store_view?.visibility = View.GONE
            }

            if ((response.getError() as? UnknownHostException) != null) {
                AuthManager.logout(this.activity)
                NavigationManager.goToLogin(this.activity)
            }
        }
    }

    private fun search(searchView: SearchView) {
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                adapter.filter.filter(newText)

                return true
            }

        })
    }
}
class HomeFragment:BaseFragment(){
私有lateinit变量适配器:MyStoreRecycleServiceAdapter
私有变量存储:List=ArrayList()
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
返回充气机。充气(R.layout.fragment_home,容器,假)
}
重写onResume(){
super.onResume()
设置选项菜单(真)
如果(已添加){
val systemService=this.context.getSystemService(context.LOCATION\u服务)作为LocationManager
BLocationManager(this.context).getLocation{
加载库()
如果(!systemService.isProviderEnabled(LocationManager.GPS_PROVIDER)){
showEnableGpsDialog()
}否则{
gpswaning.visibility=View.GONE
}
}
}
}
覆盖创建选项菜单(菜单:菜单?、充气机:菜单充气机?){
充气机?充气(右菜单搜索商店,菜单)
val search:MenuItem=menu!!.findItem(R.id.searchStore)
val searchView:searchView=search.actionView作为searchView
搜索(searchView)
searchView.maxWidth=Int.MAX\u值
super.onCreateOptions菜单(菜单,充气机)
}
私人娱乐中心(){
加载微调器?.visibility=View.visibility
StoreService.getStores(
AuthManager.getMe()?.id!!,0,BLocationManager.lat,BLocationManager.lon
){响应->
正在加载微调器?.visibility=View.GONE
if(response.getResult()!=null&&response.getResult()?.isNotEmpty()){
无数据视图?.visibility=view.GONE
存储视图?.visibility=view.visibility
stores=response.getResult()!!
//设置RecyclerView
val recyclerView=view.store\u recycler
recyclerView.layoutManager=GridLayoutManager(this.context,1)
适配器=MyStoreRecycleServiceAdapter(存储){
val intent=intent(this.context,StoreActivity::class.java)
intent.putExtra(“store\u id”,it.id)
星触觉(意图)
}
recyclerView.adapter=适配器
}否则{
无数据视图?.visibility=view.visibility
存储视图?.visibility=view.GONE
}
if((response.getError()作为?UnknownHostException)!=null){
AuthManager.logout(this.activity)
NavigationManager.goToLogin(this.activity)
}
}
}
私人娱乐搜索(searchView:searchView){
searchView.setOnQueryTextListener(对象:searchView.OnQueryTextListener{
重写onQueryTextSubmit(查询:字符串?):布尔值{
返回错误
}
重写onQueryTextChange(newText:String?):布尔值{
适配器.filter.filter(新文本)
返回真值
}
})
}
}

此错误表示您在初始化适配器之前正在使用它。这可能是因为你的商店的回调是异步的

解决此问题的一种方法是在适配器中放置
MutableList
,并在创建时使用空列表对其进行初始化:

private lateinit var adapter: MyStoreRecyclerViewAdapter


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        adapter = MyStoreRecyclerViewAdapter(mutableListOf())
        recyclerView.adapter = adapter
}
然后,当调用商店的回调时:

adapter.list = stores

另外,设置列表后,不要忘记在
适配器上调用
notifyDataSetChanged()
,否则您的更改将不可见

,如果您不想要
可变列表
,只需初始化
数组列表


onCreate()
方法中,在将其附加到
适配器之前,我不知道在哪里调用notifyDataSetChanged()。请在更新适配器列表后写入://///Adapter.list=stores;adapter.notifyDataSetChanged()///这会告诉RecyclerView重新绘制adapter中的所有项目,但当我单击项目并返回时,搜索文本仍保留。可以删除吗?对不起,我不知道你的意思,你能说得更具体一点吗?如果您试图清除和
EditText
,只需在
startActivity
之前调用
yourEditText.text=“
private lateinit var arrayList: ArrayList<String>
bluetoothDevices = arrayListOf()