当我添加-notifyDataSetChanged()时,应用程序崩溃了,代码运行完美,并在数据库中获得了帖子,但我的应用程序却没有任何反应。

问题描述 投票:0回答:1

这段代码是在一个片段内,我有一个回收器视图和数组列表,所有设置代码运行完美,并在数据库中的帖子,并得到我已经输入的日志消息,直到我添加这一行。

postAdapter!.notifyDataSetChanged()

这是我的代码第81行,我已经加粗了,所以你知道我在说什么。

我是一个新的编码,所以任何小的帮助将帮助我。

    package com.example.foonection.Fragments

import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.foonection.AddNewPostActivity
import com.example.foonection.Post
import com.example.foonection.PostAdapter

import com.example.foonection.R
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import kotlinx.android.synthetic.main.fragment_feed_seller.view.*
import java.util.ArrayList

/**
 * A simple [Fragment] subclass.
 */
class FeedSellerFragment : Fragment() {

    private var postAdapter: PostAdapter? = null
    private var postList: MutableList<Post>? = null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_feed_seller, container, false)

        var recyclerView: RecyclerView? = null
        recyclerView = view.findViewById(R.id.timeline_view_feed)
        val linearLayoutManger = LinearLayoutManager(context)
        linearLayoutManger.reverseLayout = true
        linearLayoutManger.stackFromEnd = true
        recyclerView.layoutManager = linearLayoutManger

        postList = ArrayList()
        postAdapter = context?.let { PostAdapter(it,postList as ArrayList<Post>) }
        recyclerView.adapter = postAdapter

        retrievePosts()

        view.add_post_feed_btn.setOnClickListener {
            Log.d("Log","Add Post btn Clicked")
            val intent = Intent(context, AddNewPostActivity::class.java)
            startActivity(intent)
        }



        return view
    }

    private fun retrievePosts(){

        Log.d("Log","Trying To Retrieve Posts")

        val postsRef = FirebaseDatabase.getInstance().reference.child("Posts")
        postsRef.addValueEventListener(object : ValueEventListener{
            override fun onDataChange(p0: DataSnapshot) {

                postList?.clear()

                if (p0.exists())
                {
                    Log.d("Log","p0 is existed")
                    for (snapshot in p0.children)
                    {
                        Log.d("Log","for loop snapshot")
                        val post = snapshot.getValue(Post :: class.java)
                        postList!!.add(post!!)
                        **postAdapter!!.notifyDataSetChanged()**

                    }

                }


            }

            override fun onCancelled(p0: DatabaseError) {

            }
        })



    }

}
kotlin adapter
1个回答
0
投票

像这样调用notifyDataSetChanged

 postAdapter?.let{
 it.notifyDataSetChanged()
 }
© www.soinside.com 2019 - 2024. All rights reserved.