Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段未与片段管理器关联_Android_Firebase_Kotlin_Android Recyclerview - Fatal编程技术网

Android 片段未与片段管理器关联

Android 片段未与片段管理器关联,android,firebase,kotlin,android-recyclerview,Android,Firebase,Kotlin,Android Recyclerview,这个问题已经被问了很多次,但建议的解决方案并不适用于我的具体情况 执行onProjectImageViewClick函数时,我收到以下错误: java.lang.IllegalStateException: Fragment HomeFragment{191080d} (9545b64c-bf0a-4464-8a71-b8c474526181)} not associated with a fragment manager. 建议的解决方案之一是使用下面的代码进行导航,但由于我的片段已分离,因

这个问题已经被问了很多次,但建议的解决方案并不适用于我的具体情况

执行onProjectImageViewClick函数时,我收到以下错误:

java.lang.IllegalStateException: Fragment HomeFragment{191080d} (9545b64c-bf0a-4464-8a71-b8c474526181)} not associated with a fragment manager.
建议的解决方案之一是使用下面的代码进行导航,但由于我的片段已分离,因此无法导航到另一个片段

view?.post {
findNavController().navigate(R.id.fragment_project_info)
}

另外,当我使用
println(Homefragment().isAdded)
进行故障排除时,它返回false,因此我无法使用上面编写的解决方案

在实现firebase数据库之前(仅对我的recyclerview使用占位符),我可以导航到我的fragment\u project\u信息

我的片段:

class HomeFragment : Fragment(), HomeProjectListAdapter.OnItemClickListener {

private lateinit var auth: FirebaseAuth
private lateinit var databaseReference: DatabaseReference
lateinit var listener: ValueEventListener

var recentPostRef = FirebaseDatabase.getInstance().getReference("projects").limitToLast(50)

val TAG = "loadPostData Result"

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_home, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    auth = Firebase.auth

}
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    postQueryValueListener()
}

override fun onStart() {
    super.onStart()
    val currentUser = auth.currentUser
    updateUI(currentUser)
}

override fun onProjectImageViewClick(position: Int, projectData: ProjectData) {
    findNavController().navigate(R.id.fragment_project_info)

}

private fun updateUI(currentUser: FirebaseUser?){
    if(currentUser == null){
        upload_button.visibility = View.GONE
        projects_button.visibility = View.GONE

    }
}

private fun postQueryValueListener() {
    listener = recentPostRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for (postSnapshot in dataSnapshot.children) {
                var list = ArrayList<ProjectData>()
                for (dataSnapshot1 in dataSnapshot.children) {
                    val p: ProjectData? = dataSnapshot1.getValue(ProjectData::class.java)
                    if (p != null) {
                        list.add(p)
                    }
                }
                var adapter = HomeProjectListAdapter(list, HomeFragment())
                recycler_view.adapter = adapter
                recycler_view.layoutManager = LinearLayoutManager(context)
                recycler_view.hasFixedSize()
            }
        }

        override fun onCancelled(databaseError: DatabaseError) {
            Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
        }
    })
}

override fun onStop() {
    super.onStop()
    recentPostRef.removeEventListener(listener)
}
class HomeFragment:Fragment(),HomeProjectListAdapter.OnItemClickListener{
私有lateinit var auth:FirebaseAuth
私有lateinit var databaseReference:databaseReference
lateinit变量侦听器:ValueEventListener
var recentPostRef=FirebaseDatabase.getInstance().getReference(“项目”).limitToLast(50)
val TAG=“loadPostData结果”
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回充气机。充气(R.layout.fragment_home,容器,假)
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
auth=Firebase.auth
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
postQueryValueListener()
}
覆盖有趣的onStart(){
super.onStart()
val currentUser=auth.currentUser
updateUI(当前用户)
}
覆盖ProjectMageViewClick(位置:Int,projectData:projectData){
findNavController().导航(R.id.fragment\u项目\u信息)
}
private fun updateUI(当前用户:FirebaseUser?){
if(currentUser==null){
上传按钮。可见性=查看。消失
projects\u button.visibility=View.GONE
}
}
私人娱乐postQueryValueListener(){
listener=recentPostRef.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(dataSnapshot:dataSnapshot){
for(dataSnapshot.children中的postSnapshot){
var list=ArrayList()
for(dataSnapshot.children中的dataSnapshot1){
val p:ProjectData?=dataSnapshot1.getValue(ProjectData::class.java)
如果(p!=null){
列表.添加(p)
}
}
var adapter=HomeProjectListAdapter(列表,HomeFragment())
回收器_view.adapter=适配器
回收器\u view.layoutManager=LinearLayoutManager(上下文)
回收器\u视图。hasFixedSize()
}
}
覆盖已取消(databaseError:databaseError){
Log.w(标记“loadPost:onCancelled”,databaseError.toException())
}
})
}
覆盖桌面上的乐趣(){
super.onStop()
recentPostRef.removeEventListener(侦听器)
}
}

这是我的适配器:

类HomeProjectListAdapter(
私有val项目列表:列表,
私有val侦听器:HomeFragment
):RecyclerView.Adapter(){
val TAG=“loadUserData结果”
重写CreateViewHolder(父级:ViewGroup,viewType:Int):ProjectListViewHolder{
val itemView=LayoutInflater.from(parent.context)。充气(R.layout.layout\u项目\u卡,
父对象(错误)
返回ProjectListViewHolder(itemView)
}
覆盖BindViewHolder(holder:ProjectListViewHolder,位置:Int){
val currentItem=项目列表[位置]
Glide.with(holder.projectmageview.context)
.load(currentItem.mainImageURL)
.进入(支架.投影图像视图)
}
重写getItemCount()=projectList.size
内部类ProjectListViewHolder(itemView:View):RecyclerView.ViewHolder(itemView),
View.OnClickListener{
var projectmageview:ImageView=itemView.project\u card\u image
初始化{
ProjectMageView.setOnClickListener(此)
}
覆盖有趣的onClick(v:视图?){
val位置=适配器位置
val projectData:projectData=projectList[位置]
如果(位置!=RecyclerView.无位置){
如果(v!=null){
如果(v.id==R.id.project\u card\u image){
listener.onProjectImageViewClick(位置、项目数据)
}
}
}
}
}
接口侦听器{
在ProjectMageView上单击(位置:Int,projectData:projectData)
}

}
当您运行
HomeProjectListAdapter(列表,HomeFragment())
时,您正在传入一个全新的
HomeFragment
实例。该全新实例从未连接到FragmentManager

相反,您需要传入当前片段实例:

var adapter = HomeProjectListAdapter(list, this@HomeFragment)

当您运行
HomeProjectListAdapter(列表,HomeFragment())
时,您正在传入一个全新的
HomeFragment
实例。该全新实例从未连接到FragmentManager

相反,您需要传入当前片段实例:

var adapter = HomeProjectListAdapter(list, this@HomeFragment)