Java 带有CardView和Firebase的片段中的RecyclerView
我试图在CardView和Firebase的片段中使用RecyclerView(数据库中有所有图像、名称和数量要传递到卡中),但我遇到了一个问题: 我的碎片里什么也没有!我的RecyclerView不工作,我的卡不显示,我的片段为空,日志中没有错误 以下是片段的Java: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
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);
}