Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 设置适配器后出现RecyclerView错误_Android_Kotlin_Android Recyclerview - Fatal编程技术网

Android 设置适配器后出现RecyclerView错误

Android 设置适配器后出现RecyclerView错误,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我得到 当我想显示包含RecyclerView的片段时。 我不知道在哪里编辑我的代码,我搜索了这个错误,发现了一些建议,比如在RecyclerView上禁用动画,但在我的情况下它不起作用 以下是片段的代码: package com.example.event.fragments import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View

我得到

当我想显示包含RecyclerView的片段时。 我不知道在哪里编辑我的代码,我搜索了这个错误,发现了一些建议,比如在
RecyclerView
上禁用动画,但在我的情况下它不起作用

以下是片段的代码:

package com.example.event.fragments

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.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.event.adapters.NotificationsAdapter
import com.example.event.databinding.FragmentNotificationsBinding
import com.example.event.model.Notification
import com.example.event.viewmodel.NotificationViewModel
import com.faltenreich.skeletonlayout.Skeleton
import com.faltenreich.skeletonlayout.createSkeleton

class NotificationsFragment : Fragment() {

    private lateinit var notificationsFragmentBinding: FragmentNotificationsBinding
    private lateinit var notificationViewModel: NotificationViewModel
    private lateinit var recyclerViewNotificationsSkeleton: Skeleton

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        notificationsFragmentBinding = FragmentNotificationsBinding.inflate(layoutInflater)
        notificationViewModel =
            activity?.run { ViewModelProviders.of(this).get(NotificationViewModel::class.java) }
                ?: throw Exception("Invalid Activity")
        recyclerViewNotificationsSkeleton =
            notificationsFragmentBinding.notificationsRecyclerView.createSkeleton(showShimmer = true)
        recyclerViewNotificationsSkeleton.showSkeleton()

        return notificationsFragmentBinding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val notifications = arguments?.get("notifications") as List<Notification>
        notificationsFragmentBinding.notificationsRecyclerView.layoutManager =
            LinearLayoutManager(this.activity, RecyclerView.VERTICAL, false)
        notificationsFragmentBinding.notificationsRecyclerView.adapter =
            NotificationsAdapter(notifications)
        recyclerViewNotificationsSkeleton.showOriginal()
    }
}

有人能帮我吗?提前感谢

我认为你应该使用
findViewById()
来使用
recyclerView
而不是使用数据绑定?是的,很遗憾,尝试一下,然后再次运行相同的错误。请发布整个堆栈跟踪
package com.example.event.fragments

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.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.event.adapters.NotificationsAdapter
import com.example.event.databinding.FragmentNotificationsBinding
import com.example.event.model.Notification
import com.example.event.viewmodel.NotificationViewModel
import com.faltenreich.skeletonlayout.Skeleton
import com.faltenreich.skeletonlayout.createSkeleton

class NotificationsFragment : Fragment() {

    private lateinit var notificationsFragmentBinding: FragmentNotificationsBinding
    private lateinit var notificationViewModel: NotificationViewModel
    private lateinit var recyclerViewNotificationsSkeleton: Skeleton

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        notificationsFragmentBinding = FragmentNotificationsBinding.inflate(layoutInflater)
        notificationViewModel =
            activity?.run { ViewModelProviders.of(this).get(NotificationViewModel::class.java) }
                ?: throw Exception("Invalid Activity")
        recyclerViewNotificationsSkeleton =
            notificationsFragmentBinding.notificationsRecyclerView.createSkeleton(showShimmer = true)
        recyclerViewNotificationsSkeleton.showSkeleton()

        return notificationsFragmentBinding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val notifications = arguments?.get("notifications") as List<Notification>
        notificationsFragmentBinding.notificationsRecyclerView.layoutManager =
            LinearLayoutManager(this.activity, RecyclerView.VERTICAL, false)
        notificationsFragmentBinding.notificationsRecyclerView.adapter =
            NotificationsAdapter(notifications)
        recyclerViewNotificationsSkeleton.showOriginal()
    }
}
package com.example.event.adapters

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.event.R
import com.example.event.model.Notification
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.item_notification.view.*


class NotificationsAdapter(private val notifications: List<Notification>) :
    RecyclerView.Adapter<NotificationsAdapter.ViewHolder>() {

    private val notificationActionMessage = hashMapOf(
        "partecipate" to "parteciperà al tuo evento",
        "interested" to "è interessato al tuo evento",
        "comment" to "ha commentato il tuo evento"
    )

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view: View =
            LayoutInflater.from(parent.context)
                .inflate(R.layout.item_notification, parent, false)
        return ViewHolder(view)
    }

    override fun getItemCount() = notifications.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val notification: Notification = notifications[position]
        Picasso
            .get()
            .load(notification.senderImage)
            .fit()
            .centerInside()
            .into(holder.senderProfileImage)
        holder.senderUsername.text = notification.sender
        holder.eventName.text = notification.eventName
        holder.notificationAction.text = notificationActionMessage[notification.notificationAction]
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val senderUsername: TextView = itemView.senderTextView
        val senderProfileImage: ImageView = itemView.senderProfileImage
        val notificationAction: TextView = itemView.notificationActionTextView
        val eventName: TextView = itemView.eventNameTextView
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/notificationsRecyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>
2020-02-05 11:27:31.924 868-868/com.example.event E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.event, PID: 868
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.recyclerview.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
        at androidx.recyclerview.widget.RecyclerView.findMinMaxChildLayoutPositions(RecyclerView.java:4311)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4045)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3534)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24530)
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1414)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.widget.ScrollView.onMeasure(ScrollView.java:452)
        at android.view.View.measure(View.java:24530)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24530)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:742)
        at android.view.View.measure(View.java:24530)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3006)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1833)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2122)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
        at android.view.Choreographer.doCallbacks(Choreographer.java:790)
        at android.view.Choreographer.doFrame(Choreographer.java:725)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
2020-02-05 11:27:31.940 868-868/com.example.event E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)