Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Java 带有CardView和Firebase的片段中的RecyclerView_Java_Android_Xml_Firebase - Fatal编程技术网

Java 带有CardView和Firebase的片段中的RecyclerView

Java 带有CardView和Firebase的片段中的RecyclerView,java,android,xml,firebase,Java,Android,Xml,Firebase,我试图在CardView和Firebase的片段中使用RecyclerView(数据库中有所有图像、名称和数量要传递到卡中),但我遇到了一个问题: 我的碎片里什么也没有!我的RecyclerView不工作,我的卡不显示,我的片段为空,日志中没有错误 以下是片段的Java: package com.example.progettocontab.assistenza; import android.os.Bundle; import android.view.LayoutInflater; imp

我试图在CardView和Firebase的片段中使用RecyclerView(数据库中有所有图像、名称和数量要传递到卡中),但我遇到了一个问题:

我的碎片里什么也没有!我的RecyclerView不工作,我的卡不显示,我的片段为空,日志中没有错误

以下是片段的Java:

package com.example.progettocontab.assistenza;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.progettocontab.R;

import com.example.progettocontab.app.Articolo;
import com.example.progettocontab.app.ArticoloAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.FirebaseDatabase;

public class FragmentAssistenza extends Fragment {

    RecyclerView recyclerView;
    ArticoloAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_assistenza, container, false);

        recyclerView = (RecyclerView) view.findViewById(R.id.recview);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));

        FirebaseRecyclerOptions<Articolo> options =
                new FirebaseRecyclerOptions.Builder<Articolo>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Articoli"), Articolo.class)
                        .build();

        adapter = new ArticoloAdapter(options);
        recyclerView.setAdapter(adapter);

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        adapter.startListening();
    }

   @Override
    public void onStop() {
        super.onStop();
        adapter.stopListening();
    }
}
<?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"
    tools:context=".assistenza.FragmentAssistenza">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
以下是CardView的XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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"
    app:cardCornerRadius="5dp"
    android:elevation="5dp"
    app:cardUseCompatPadding="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp">

        <androidx.appcompat.widget.AppCompatImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@mipmap/ic_launcher"
            android:layout_centerVertical="true"
            android:id="@+id/img"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/nameText"
            android:text="This is Demo Name"
            android:textStyle="bold"
            android:textSize="25sp"
            android:textColor="#000"
            android:layout_toRightOf="@id/img"
            android:layout_marginLeft="10dp"/>

        <TextView
            android:id="@+id/amountText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/nameText"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="12dp"
            android:layout_toRightOf="@id/img"
            android:text="This is Course Name"
            android:textColor="#000"
            android:textSize="25sp" />


    </RelativeLayout>

</androidx.cardview.widget.CardView>

我认为您可能会遇到该错误,因为您的模块的gradle中有
实现'com.google.firebase:firebase messaging'
,但您尚未在清单中注册该服务。因此,要么从gradle中删除该行(如果您不需要firebase的消息传递功能),要么将该服务添加到清单中,如下所示:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

我认为您可能会遇到该错误,因为您的模块的gradle中有
实现'com.google.firebase:firebase messaging'
,但您尚未在清单中注册该服务。因此,要么从gradle中删除该行(如果您不需要firebase的消息传递功能),要么将该服务添加到清单中,如下所示:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

尝试在
startListening之后移动
recyclerView.setAdapter(适配器)

因此,将其从
onViewCreated()
中删除,并将其添加到
onStart()


尝试在您开始查看后移动
recyclerView.setAdapter(适配器)

因此,将其从
onViewCreated()
中删除,并将其添加到
onStart()


尝试将recyclerview转换为onViewCreated,因为此时,片段的视图将被填充,您可以访问recyclerview并将其充气

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.fragment_assistenza, container, false);
   return view;
}

@Override
public void onViewCreated() {
   recyclerView = (RecyclerView) view.findViewById(R.id.recview);
   recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));

   FirebaseRecyclerOptions<Articolo> options =
                new FirebaseRecyclerOptions.Builder<Articolo>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Articoli"), Articolo.class)
                        .build();

   adapter = new ArticoloAdapter(options);
   recyclerView.setAdapter(adapter);
}
@覆盖
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u assistenza,容器,假);
返回视图;
}
@凌驾
public void onViewCreated(){
recyclerView=(recyclerView)view.findViewById(R.id.recview);
setLayoutManager(新的LinearLayoutManager(getActivity().getApplicationContext());
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(FirebaseDatabase.getInstance().getReference().child(“Articoli”),Articolo.class)
.build();
适配器=新的ArticoloAdapter(选件);
recyclerView.setAdapter(适配器);
}

尝试将recyclerview切换到onViewCreated,因为此时,碎片视图会被填充,您可以访问recyclerview并将其充气

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.fragment_assistenza, container, false);
   return view;
}

@Override
public void onViewCreated() {
   recyclerView = (RecyclerView) view.findViewById(R.id.recview);
   recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));

   FirebaseRecyclerOptions<Articolo> options =
                new FirebaseRecyclerOptions.Builder<Articolo>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Articoli"), Articolo.class)
                        .build();

   adapter = new ArticoloAdapter(options);
   recyclerView.setAdapter(adapter);
}
@覆盖
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u assistenza,容器,假);
返回视图;
}
@凌驾
public void onViewCreated(){
recyclerView=(recyclerView)view.findViewById(R.id.recview);
setLayoutManager(新的LinearLayoutManager(getActivity().getApplicationContext());
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(FirebaseDatabase.getInstance().getReference().child(“Articoli”),Articolo.class)
.build();
适配器=新的ArticoloAdapter(选件);
recyclerView.setAdapter(适配器);
}

尝试将您的recyclerview逻辑转换为onViewCreated()生命周期方法。我如何做到这一点?发布了一个关于这一点的答案尝试将您的recyclerview逻辑转换为onViewCreated()生命周期方法生命周期方法。我如何做到这一点?发布了一个关于我们没有此实现的答案我们没有此实现不适用于meDidn不适用于meDidn不适用于我,但谢谢我不适用于我,但谢谢
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.fragment_assistenza, container, false);
   return view;
}

@Override
public void onViewCreated() {
   recyclerView = (RecyclerView) view.findViewById(R.id.recview);
   recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));

   FirebaseRecyclerOptions<Articolo> options =
                new FirebaseRecyclerOptions.Builder<Articolo>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Articoli"), Articolo.class)
                        .build();

   adapter = new ArticoloAdapter(options);
   recyclerView.setAdapter(adapter);
}