首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的实时数据库不能工作?

为什么我的实时数据库不能工作?
EN

Stack Overflow用户
提问于 2022-04-12 15:06:04
回答 1查看 43关注 0票数 0

我面临的问题是我的防火墙也不能工作,它只是显示了我的应用程序中没有任何东西(白页)。我需要使用火基地,以显示材料在回收的看法。然而,作为防火墙的新用户,我以字符串的形式设置了我的回收器视图,在它之后,我也想使用作为一个图像,一个是文本。但我认为我也需要解决第一个问题。有人能帮我吗?谢谢你的帮助!!

我的原始代码:

代码语言:javascript
运行
复制
package com.example.assignment_mad

import android.content.ContentValues.TAG
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 android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.example.assignment_mad.databinding.ActivityMainBinding
import com.example.assignment_mad.databinding.FragmentNotificationBinding
import com.example.assignment_mad.databinding.FragmentSearchPageBinding
import com.google.android.material.imageview.ShapeableImageView
import com.google.android.material.tabs.TabLayout
import com.google.firebase.database.*
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_notification_.*


class Notification_Fragment : Fragment( ) {

    val database=Firebase.database
    val myRef=database.getReference("message")

    private var _binding:FragmentNotificationBinding?=null
    private val binding get()=_binding!!

    private lateinit var dbref: DatabaseReference

    private lateinit var newRecyclerView: RecyclerView
    private lateinit var newArrayList: ArrayList<Company>
    private lateinit var tempArrayList: ArrayList<Company>
    lateinit var imageId:Array<Int>
    lateinit var heading:Array<String>
    lateinit var news:Array<String>

    private var layoutManager: RecyclerView.LayoutManager? = null
    private var adapter: RecyclerView.Adapter<NotificationAdapter.MyViewHolder>? = null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        var views =inflater.inflate(R.layout.fragment_notification_, container, false)
        newRecyclerView=views.findViewById(R.id.recyclerView)

        // Inflate the layout for this fragment
        return views



    }

    override fun onViewCreated(itemView: View, savedInstanceState: Bundle?) {

        super.onViewCreated(itemView, savedInstanceState)

        newArrayList= arrayListOf<Company>()
        tempArrayList= arrayListOf<Company>()
        getUserdata()

    }

    private fun getUserdata() {
        dbref=FirebaseDatabase.getInstance().getReference("Notification")
        dbref.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                if (snapshot.exists()){
                    for (companySnapshot in snapshot.children){
                        val company=companySnapshot.getValue(Company::class.java)
                        newArrayList.add(company!!)
                    }

                    newRecyclerView.adapter=NotificationAdapter(newArrayList)
                }
            }

            override fun onCancelled(error: DatabaseError) {
                Log.w(TAG, "Failed to read value.", error.toException())
            }

        })
        
        newRecyclerView.layoutManager=LinearLayoutManager(activity)
        newRecyclerView.setHasFixedSize(true)
        newRecyclerView.adapter=adapter
    }


}

适配器代码:

代码语言:javascript
运行
复制
package com.example.assignment_mad

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.imageview.ShapeableImageView
import kotlinx.android.synthetic.main.dropdown_item.view.*


class NotificationAdapter(private val companysList:ArrayList<Company>):RecyclerView.Adapter<NotificationAdapter.MyViewHolder>() {



    private var mListener:onItemClickListener?=null

    interface onItemClickListener{
        fun onItemClick(position: Int)
    }

    fun setOnItemClickListener(listener: onItemClickListener){
        mListener=listener
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {

        val itemView=LayoutInflater.from(parent.context).inflate(R.layout.list_item,parent,false)
        return MyViewHolder(itemView,mListener)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val currentItem=companysList[position]
        holder.titleImage.text=currentItem.titleImage
//        holder.titleImage.setImageResource(currentItem.titleImage)
        holder.tvHeading.text=currentItem.heading
    }

    override fun getItemCount(): Int {
        return companysList.size
    }

    //to insert the post detail


    class MyViewHolder(itemView: View,listener: onItemClickListener?):RecyclerView.ViewHolder(itemView){

        val titleImage:TextView=itemView.findViewById(R.id.title_image)
//        val titleImage:ShapeableImageView=itemView.findViewById(R.id.title_image)
        val tvHeading: TextView =itemView.findViewById(R.id.tvHeading)

        init {
            itemView.setOnClickListener{
                listener?.onItemClick(adapterPosition)
            }
        }
    }

}

数据:

代码语言:javascript
运行
复制
package com.example.assignment_mad

data class Company(var titleImage:String?=null,var heading:String?=null)

//data class Company(var titleImage:Int,var heading:String)

xml文件(如您所见,实际上我需要将图像和文本放在一起):

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_margin="8dp">

<!--    <com.google.android.material.imageview.ShapeableImageView-->
<!--        android:layout_width="80dp"-->
<!--        android:layout_height="80dp"-->
<!--        android:id="@+id/title_image"-->
<!--        android:scaleType="centerCrop"-->
<!--        app:layout_constraintStart_toStartOf="parent"-->
<!--        app:layout_constraintTop_toTopOf="parent"-->
<!--        app:shapeAppearanceOverlay="@style/RoundCorner"-->
<!--        android:src="@drawable/company_logo_1"/>    -->

    <TextView
        android:id="@+id/title_image"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:text="Self Brief"
        android:textSize="16dp"
        android:textStyle="bold"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="32dp"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <TextView
        android:id="@+id/tvHeading"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:text="Candidate Biden Called Saudi Arable a Pareft eaft."
        android:textSize="16dp"
        android:textStyle="bold"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="32dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/title_image"
        app:layout_constraintTop_toTopOf="parent"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_margin="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/title_image"
        android:background="@color/underline"/>


</androidx.constraintlayout.widget.ConstraintLayout>

这是我们所面对的问题。或者其他人可以直接教我如何为实时数据库设置图像?

我的数据库图片:

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 18:22:48

您的RecyclerView没有显示任何项,因为您从未初始化adapter变量,您正在将该变量设置为您的回收视图的适配器。在adapter中初始化onViewCreated()变量

代码语言:javascript
运行
复制
override fun onViewCreated(itemView: View, savedInstanceState: Bundle?) {
    super.onViewCreated(itemView, savedInstanceState)
    newArrayList= arrayListOf<Company>()
    tempArrayList= arrayListOf<Company>()

    adapter = NotificationAdapter(newArrayList) //Initialize adapter

    getUserdata()
}

onDataChange()内部,在向newArrayList添加数据之后,通过调用adapter上的notifyDataSetChanged()通知适配器。它将更新RecyclerView。

代码语言:javascript
运行
复制
private fun getUserdata() {
        dbref=FirebaseDatabase.getInstance().getReference("Notification")
        dbref.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                if (snapshot.exists()){
                    for (companySnapshot in snapshot.children){
                        val company=companySnapshot.getValue(Company::class.java)
                        newArrayList.add(company!!)
                    }
                    adapter.notifyDataSetChanged()
                }
            }

            override fun onCancelled(error: DatabaseError) {
                Log.w(TAG, "Failed to read value.", error.toException())
            }

        })
        
        newRecyclerView.layoutManager=LinearLayoutManager(activity)
        newRecyclerView.setHasFixedSize(true)
        newRecyclerView.adapter = adapter
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71845029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档