recyclerview 未在片段中显示数据
recyclerview is not showing data in fragment
我正在尝试从 firebase 获取一些数据并将其显示在片段的回收站视图中
所以我确实创建了一个方法来做到这一点:
private void getModules(View view)
{
CollectionReference ref = db.collection(level).document(major).collection("Modules");
ref.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots)
{
for (DocumentSnapshot documentSnapshot:queryDocumentSnapshots.getDocuments()) {
Module module = documentSnapshot.toObject(Module.class);
modulesList.add(module);
}
ModulesAdapter adapter = new ModulesAdapter(modulesList);
modulesRecyclerView.setHasFixedSize(true);
modulesRecyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
modulesRecyclerView.setAdapter(adapter);
}
});
}
数据检索成功,它在数组列表中,但它认为问题出在这些代码行中:
ModulesAdapter adapter = new ModulesAdapter(modulesList);
modulesRecyclerView.setHasFixedSize(true);
modulesRecyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
modulesRecyclerView.setAdapter(adapter);
模块 class 是:
public class Module {
private String name;
private String responsable;
int coefficient;
Uri imageUri;
String imageUrl;
public Module() {
}
public Module(String name, String responsable, int coefficient , Uri image) {
this.name = name;
this.responsable = responsable;
this.imageUri = image;
this.coefficient = coefficient;
}
public Module(String name, String responsable, int coefficient) {
this.name = name;
this.responsable = responsable;
this.coefficient = coefficient;
this.imageUri= Uri.parse("android.resource://com.aymenmellah.edisco/" + R.drawable.ali);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getResponsable() {
return responsable;
}
public void setResponsable(String responsable) {
this.responsable = responsable;
}
public int getCoefficient() {
return coefficient;
}
public void setCoefficient(int coefficient) {
this.coefficient = coefficient;
}
@Exclude
public Uri getImageUri() {
return imageUri;
}
public void setImageUri(Uri imageUri) {
this.imageUri = imageUri;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
回收器视图适配器是:
private List<Module> modulesArrayList;
public ModulesAdapter(List<Module> modulesArrayList) {
this.modulesArrayList = modulesArrayList;
}
@NonNull
@Override
public ModulesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ModulesViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.module_item,parent,false));
}
@Override
public void onBindViewHolder(@NonNull ModulesViewHolder holder, int position) {
Module module = modulesArrayList.get(position);
holder.moduleName.setText(module.getName());
holder.moduleResponsable.setText(module.getResponsable());
holder.moduleCoefficient.setText(module.getCoefficient());
//ADD HERE IMAGE
}
@Override
public int getItemCount() {
return modulesArrayList.size();
}
public class ModulesViewHolder extends RecyclerView.ViewHolder {
TextView moduleName,moduleResponsable,moduleCoefficient,moduleImage;
public ModulesViewHolder(@NonNull View itemView) {
super(itemView);
moduleName = itemView.findViewById(R.id.module_name);
moduleResponsable = itemView.findViewById(R.id.responsable_name);
moduleCoefficient = itemView.findViewById(R.id.coefficient_module_item);
//moduleImage = itemView.findViewById(R.id.module_image_item);
}
}
}`
这是 onCreateView 方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_modules, container, false);
modulesList = new ArrayList<>();
db=FirebaseFirestore.getInstance();
modulesRecyclerView = view.findViewById(R.id.modules_recyclerview);
getModules(view);
return view;
}
当上面的代码执行时,应用程序崩溃并且 return 到之前的 activity 我得到这个错误:
android.content.res.Resources$NotFoundException: String resource ID #0x2
at android.content.res.Resources.getText(Resources.java:375)
at android.widget.TextView.setText(TextView.java:6411)
at com.aymenmellah.edisco.Controller.ModulesAdapter.onBindViewHolder(ModulesAdapter.java:38)
at com.aymenmellah.edisco.Controller.ModulesAdapter.onBindViewHolder(ModulesAdapter.java:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9587)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1685)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2022-04-23 17:46:14.854 26120-26120/com.aymenmellah.edisco E/AndroidRuntime: at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:842)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3565)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2988)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2051)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8456)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1065)
at android.view.Choreographer.doCallbacks(Choreographer.java:889)
at android.view.Choreographer.doFrame(Choreographer.java:816)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1050)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7830)
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:1040)
问题
您没有按照在文本视图中设置文本的方法进行操作。文本视图可以通过这些方法获得其文本:
public void setText(String text);
// or
public void setText(int resId); // the resource id
现在,您正在做的是给它一个 int(module.getCoefficient()
return int) ,因此调用了第二种方法。现在,第二种方法需要 R.string.hello_world
之类的东西……但是,不是 0、100、8593 等等……但是,您给出的是我给出的第二种情况。那会给出那个错误。
解决方案
尝试将其更改为字符串。这些是这样做的 3 种方法:
使用String
class:
holder.moduleCoefficient.setText(String.valueOf(module.getCoefficient()));
使用Integer
class:
holder.moduleCoefficien.setText(Integer.toString(module.getCoefficient()));
使用String
拼接:
holder.moduleCoefficient.setText(module.getCoefficient() + "");
我正在尝试从 firebase 获取一些数据并将其显示在片段的回收站视图中 所以我确实创建了一个方法来做到这一点:
private void getModules(View view)
{
CollectionReference ref = db.collection(level).document(major).collection("Modules");
ref.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots)
{
for (DocumentSnapshot documentSnapshot:queryDocumentSnapshots.getDocuments()) {
Module module = documentSnapshot.toObject(Module.class);
modulesList.add(module);
}
ModulesAdapter adapter = new ModulesAdapter(modulesList);
modulesRecyclerView.setHasFixedSize(true);
modulesRecyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
modulesRecyclerView.setAdapter(adapter);
}
});
}
数据检索成功,它在数组列表中,但它认为问题出在这些代码行中:
ModulesAdapter adapter = new ModulesAdapter(modulesList);
modulesRecyclerView.setHasFixedSize(true);
modulesRecyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
modulesRecyclerView.setAdapter(adapter);
模块 class 是:
public class Module {
private String name;
private String responsable;
int coefficient;
Uri imageUri;
String imageUrl;
public Module() {
}
public Module(String name, String responsable, int coefficient , Uri image) {
this.name = name;
this.responsable = responsable;
this.imageUri = image;
this.coefficient = coefficient;
}
public Module(String name, String responsable, int coefficient) {
this.name = name;
this.responsable = responsable;
this.coefficient = coefficient;
this.imageUri= Uri.parse("android.resource://com.aymenmellah.edisco/" + R.drawable.ali);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getResponsable() {
return responsable;
}
public void setResponsable(String responsable) {
this.responsable = responsable;
}
public int getCoefficient() {
return coefficient;
}
public void setCoefficient(int coefficient) {
this.coefficient = coefficient;
}
@Exclude
public Uri getImageUri() {
return imageUri;
}
public void setImageUri(Uri imageUri) {
this.imageUri = imageUri;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
回收器视图适配器是:
private List<Module> modulesArrayList;
public ModulesAdapter(List<Module> modulesArrayList) {
this.modulesArrayList = modulesArrayList;
}
@NonNull
@Override
public ModulesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ModulesViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.module_item,parent,false));
}
@Override
public void onBindViewHolder(@NonNull ModulesViewHolder holder, int position) {
Module module = modulesArrayList.get(position);
holder.moduleName.setText(module.getName());
holder.moduleResponsable.setText(module.getResponsable());
holder.moduleCoefficient.setText(module.getCoefficient());
//ADD HERE IMAGE
}
@Override
public int getItemCount() {
return modulesArrayList.size();
}
public class ModulesViewHolder extends RecyclerView.ViewHolder {
TextView moduleName,moduleResponsable,moduleCoefficient,moduleImage;
public ModulesViewHolder(@NonNull View itemView) {
super(itemView);
moduleName = itemView.findViewById(R.id.module_name);
moduleResponsable = itemView.findViewById(R.id.responsable_name);
moduleCoefficient = itemView.findViewById(R.id.coefficient_module_item);
//moduleImage = itemView.findViewById(R.id.module_image_item);
}
}
}`
这是 onCreateView 方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_modules, container, false);
modulesList = new ArrayList<>();
db=FirebaseFirestore.getInstance();
modulesRecyclerView = view.findViewById(R.id.modules_recyclerview);
getModules(view);
return view;
}
当上面的代码执行时,应用程序崩溃并且 return 到之前的 activity 我得到这个错误:
android.content.res.Resources$NotFoundException: String resource ID #0x2
at android.content.res.Resources.getText(Resources.java:375)
at android.widget.TextView.setText(TextView.java:6411)
at com.aymenmellah.edisco.Controller.ModulesAdapter.onBindViewHolder(ModulesAdapter.java:38)
at com.aymenmellah.edisco.Controller.ModulesAdapter.onBindViewHolder(ModulesAdapter.java:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9587)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1685)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2022-04-23 17:46:14.854 26120-26120/com.aymenmellah.edisco E/AndroidRuntime: at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:842)
at android.view.View.layout(View.java:22344)
at android.view.ViewGroup.layout(ViewGroup.java:6445)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3565)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2988)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2051)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8456)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1065)
at android.view.Choreographer.doCallbacks(Choreographer.java:889)
at android.view.Choreographer.doFrame(Choreographer.java:816)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1050)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7830)
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:1040)
问题
您没有按照在文本视图中设置文本的方法进行操作。文本视图可以通过这些方法获得其文本:
public void setText(String text);
// or
public void setText(int resId); // the resource id
现在,您正在做的是给它一个 int(module.getCoefficient()
return int) ,因此调用了第二种方法。现在,第二种方法需要 R.string.hello_world
之类的东西……但是,不是 0、100、8593 等等……但是,您给出的是我给出的第二种情况。那会给出那个错误。
解决方案
尝试将其更改为字符串。这些是这样做的 3 种方法:
使用
String
class:holder.moduleCoefficient.setText(String.valueOf(module.getCoefficient()));
使用
Integer
class:holder.moduleCoefficien.setText(Integer.toString(module.getCoefficient()));
使用
String
拼接:holder.moduleCoefficient.setText(module.getCoefficient() + "");