大佬教程收集整理的这篇文章主要介绍了recyclerView 片段错误(上下文),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我将 Kotlin 与 SDK 版本 29 一起使用。 我在几个网站上搜索过,但@R_262_10739@关于这个主题的任何内容。 我想使用适配器在我的片段中使用 recyclervIEw,但有一个关于我的适配器的错误,我无法解决。
这里是错误:
类型不匹配:推断的类型是 Flux 但需要上下文
它来自片段的下一行:
adapter = postsAdapter(this,posts)
你知道如何设置上下文吗?
这是我的代码:
导入:
import androID.content.Context
import androID.text.format.DateUtils
import androID.vIEw.LayoutInflater
import androID.vIEw.VIEw
import androID.vIEw.VIEwGroup
import androIDx.recyclervIEw.Widget.RecyclerVIEw
import com.bumptech.glIDe.GlIDe
import com.example.givenaskv1.R
import kotlinx.androID.synthetic.main.item_post.vIEw.*
class postsAdapter (val context: Context,val posts : List<Post>) :
RecyclerVIEw.Adapter<postsAdapter.VIEwHolder>() {
overrIDe fun onCreateVIEwHolder(parent: VIEwGroup,vIEwType: int): VIEwHolder {
val vIEw = LayoutInflater.from(context).inflate(R.layout.item_post,parent,falsE)
return VIEwHolder(vIEw)
}
overrIDe fun getItemCount() = posts.size
overrIDe fun onBindVIEwHolder(holder: VIEwHolder,position: int) {
holder.bind(posts[position])
}
inner class VIEwHolder(itemVIEw: VIEw) : RecyclerVIEw.VIEwHolder(itemVIEw) {
fun bind(post: Post) {
itemVIEw.tvUser@R_502_6889@.text = post.user?.first@R_502_6889@
itemVIEw.tvDescription.text = post.description
GlIDe.with(context).load(post.imageUrl).into(itemVIEw.ivPost)
itemVIEw.tvrelativeTime.text = DateUtils.getrelativeTimeSpanString(post.creationTimeMs)
}
}
}
导入:
import androID.os.bundle
import androID.util.Log
import androID.vIEw.LayoutInflater
import androID.vIEw.VIEw
import androID.vIEw.VIEwGroup
import androIDx.fragment.app.Fragment
import androIDx.recyclervIEw.Widget.linearlayoutmanager
import com.example.givenaskv1.R
import com.example.givenaskv1.models.Post
import com.example.givenaskv1.models.postsAdapter
import com.Google.firebase.firestore.FirebaseFirestore
import com.Google.firebase.firestore.query
import kotlinx.androID.synthetic.main.fragment_flux.*
private const val TAG = "Flux"
class Flux : Fragment() {
private lateinit var firestoreDb : FirebaseFirestore
private lateinit var posts : MutableList<Post>
private lateinit var adapter: postsAdapter
overrIDe fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceStatE)
posts = mutablelistof()
adapter = postsAdapter(this,posts) <----- HERE IS THE ERROR
rvposts.adapter = adapter
rvposts.layoutManager = linearlayoutmanager(this.context)
firestoreDb = FirebaseFirestore.geTinstance()
val postsReference = firestoreDb.collection("post")
// .limit() indique le nombre de post MAXIMIM a afficher en même temps,pour éviter le lagg
.limit(20)
// .orderBy() filtre selon le critère choisi (ici par ordre chonologiquE)
.orderBy("creation_time_ms",query.Direction.DESCENDING)
postsReference.addSnapshotListener{ snapshot,exception ->
if (exception != null || snapshot == null) {
Log.e(tag,"Exception when querying posts",exception)
return@addSnapshotListener
}
val postList = snapshot.toObjects(Post::class.java)
posts.clear()
posts.addAll(postList)
adapter.notifyDataSetChanged()
for (post in postList) {
Log.i(tag,"Post ${post}")
}
}
}
overrIDe fun onCreateVIEw(
inflater: LayoutInflater,container: VIEwGroup?,savedInstanceState: Bundle?
): VIEw? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_flux,container,falsE)
}
}
<?xml version="1.0" enCoding="utf-8"?>
<linearLayout xmlns:androID="http://scheR_508_11845@as.androID.com/apk/res/androID"
xmlns:app="http://scheR_508_11845@as.androID.com/apk/res-auto"
xmlns:tools="http://scheR_508_11845@as.androID.com/tools"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
androID:orIEntation="vertical"
tools:context=".Flux.Flux">
<androIDx.recyclervIEw.Widget.RecyclerVIEw
androID:ID="@+ID/rvposts"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent" />
</linearLayout>
当我尝试替换时
adapter = postsAdapter(this,posts)
与
adapter = postsAdapter(requireContext(),posts)
出现以下错误:
java.lang.IllegalStateException: rvposts 不能为 null
非常感谢!
这是因为在创建片段视图之前,您在片段 RecyclerView
回调中获得了 onCreate
实例;由于onCreate()
回调在onCreateView()
回调
注意:片段视图由 onCreateView()
创建并返回。
为了解决这个问题,将代码从 onCreate()
转移到 onCreateView()
private const val TAG = "Flux"
class Flux : Fragment() {
private lateinit var firestoreDb : FirebaseFirestore
private lateinit var posts : MutableList<Post>
private lateinit var adapter: PostsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceStatE)
}
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_flux,container,falsE)
posts = mutableListOf()
adapter = PostsAdapter(requireContext(),posts)
val rvPosts = view.findViewById<RecyclerView>(R.id.rvPosts)
rvPosts.adapter = adapter
rvPosts.layoutManager = LinearLayoutManager(this.context)
firestoreDb = FirebaseFirestore.geTinstance()
val postsReference = firestoreDb.collection("post")
// .limit() indique le nombre de post MAXIMIM a afficher en même temps,pour éviter le lagg
.limit(20)
// .orderBy() filtre selon le critère choisi (ici par ordre chonologiquE)
.orderBy("creation_time_ms",Query.Direction.DESCENDING)
postsReference.addSnapshotListener{ snapshot,exception ->
if (exception != null || snapshot == null) {
Log.e(tag,"Exception when querying posts",exception)
return@addSnapshotListener
}
val postList = snapshot.toObjects(Post::class.java)
posts.clear()
posts.addAll(postList)
adapter.notifyDataSetChanged()
for (post in postList) {
Log.i(tag,"Post ${post}")
}
return view
}
}
以上是大佬教程为你收集整理的recyclerView 片段错误(上下文)全部内容,希望文章能够帮你解决recyclerView 片段错误(上下文)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。