android - FirebaseRecyclerAdapter 没有显示任何内容
问题描述
这是我的主要课程,
public class MainMenu extends AppCompatActivity {
FirebaseDatabase fireData;
DatabaseReference ref;
FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layout.activity_main_menu);
fireData=FirebaseDatabase.getInstance();
ref=fireData.getReference("Menu");
recycler_menu=findViewById(R.id.recycler_menu);
recycler_menu.setHasFixedSize(true);
layoutManager=new LinearLayoutManager(this);
recycler_menu.setLayoutManager(layoutManager);
loadMenu();
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
private void loadMenu() {
Query query=
FirebaseDatabase.getInstance().getReference().child("Menu");
FirebaseRecyclerOptions<Category> options=new
FirebaseRecyclerOptions.Builder<Category>()
.setQuery(query, Category.class).build();
adapter=new FirebaseRecyclerAdapter<Category, MenuViewHolder>
(options) {
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder
holder, int position, @NonNull final Category model) {
holder.txtMenu.setText(model.getName());
Picasso.with(getBaseContext()).load(model.getImage())
.fit()
.centerCrop()
.into(holder.img);
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean
isLongClick) {
Toast.makeText(MainMenu.this, ""+model.getName(),
Toast.LENGTH_SHORT).show();
}
});
}
@NonNull
@Override
public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup
viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(layout.menu_item, viewGroup, false);
return new MenuViewHolder(view);
}
};
recycler_menu.setAdapter(adapter);
}
}
这是我的视图持有者类,
public class MenuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView txtMenu;
public ImageView img;
private ItemClickListener itemClickListener;
public MenuViewHolder(@NonNull View itemView) {
super(itemView);
txtMenu=itemView.findViewById(R.id.menu_namae);
img=itemView.findViewById(R.id.menu_list);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener){
this.itemClickListener=itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.onClick(v, getAdapterPosition(), false );
}
}
我逐行遵循,FirebaseRecyclerAdapter 上的教程无济于事。我是 Android Studio 的初学者,我被困在这一点上。请帮忙。我多次检查布局文件,没有发现错误。提前致谢。PS,如果需要更多信息,请随时询问。
解决方案
好的试试这个:创建一些我看到的类你有图像和名称,类名称是类别:
public class Category {
private String CategoryName;
private String CategoryImage;
public Category() {
}
public Category(String categoryName, String categoryImage) {
CategoryName = categoryName;
CategoryImage = categoryImage;
}
public String getCategoryName() {
return CategoryName;
}
public void setCategoryName(String categoryName) {
CategoryName = categoryName;
}
public String getCategoryImage() {
return CategoryImage;
}
public void setCategoryImage(String categoryImage) {
CategoryImage = categoryImage;
}}
下一个带有 recyclerView 的 Activity
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Category_List">
<android.support.v7.widget.RecyclerView
android:id="@+id/category_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/category_item" />
还有一个带有卡片视图的布局资源文件,您可以在其中显示类别项目
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<RelativeLayout
android:id="@+id/category_relative_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/category_image_item"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="8dp"
android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_image" />
<TextView
android:id="@+id/category_name_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/category_image_item"
android:layout_alignParentStart="true"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:text="TextView"
android:textSize="24sp" />
</RelativeLayout>
下一个分类Apater
public class CategoryAdapter extends FirestoreRecyclerAdapter<Category, CategoryAdapter.CategoryHolder> {
private OnItemClickListener listener;
public CategoryAdapter(@NonNull FirestoreRecyclerOptions<Category> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull CategoryHolder holder, int position, @NonNull Category model) {
holder.CategoryName.setText(model.getCategoryName());
Picasso.get().load(model.getCategoryImage()).error(R.drawable.ic_image).placeholder(R.drawable.ic_image).into(holder.CategoryImage); }
@NonNull
@Override
public CategoryHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.category_item, viewGroup, false);
return new CategoryHolder(v);
}
public class CategoryHolder extends RecyclerView.ViewHolder {
public TextView CategoryName;
public ImageView CategoryImage;
public CategoryHolder(@NonNull View itemView) {
super(itemView);
CategoryName = itemView.findViewById(R.id.category_name_item);
CategoryImage = itemView.findViewById(R.id.category_image_item);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(CategoryAdapter.OnItemClickListener listener) {
this.listener = listener;
}
}
在 MainActivity 中设置 recyclerview: on create 方法后的顶部引用到 Adapter,
public class MainActivity extends AppCompatActivity {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference categoryRef = db.collection("category_tbl");
public CategoryAdapter categoryAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category__list);
setTitle(R.string.category_list_title);
setUpRecyclerView();
}
private void setUpRecyclerView() {
Query query = categoryRef.orderBy("categoryPrior", Query.Direction.DESCENDING);
final FirestoreRecyclerOptions<Category> category_options = new FirestoreRecyclerOptions.Builder<Category>()
.setQuery(query, Category.class).build();
categoryAdapter = new CategoryAdapter(category_options);
RecyclerView recyclerView = findViewById(R.id.category_recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(categoryAdapter);
}
@Override
protected void onStart() {
super.onStart();
categoryAdapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
categoryAdapter.stopListening();
}
最后尝试直接在 FiredatabaseFiresotre 中添加一些数据并查看是否显示。
推荐阅读
- arduino - 来自 NTP 服务器的日期
- google-apps-script - 如何使用 Google Apps 脚本或 GAS 创建 Google 表单测验?
- amazon-web-services - 如何将 AWS Glue 表结构复制到 AWS Redshift
- python - pytorch forward 函数内部的多处理
- javascript - 如何在我的 React 应用程序中实现 Sequalize API?
- r - ggplot2 长格式数据散点图,具有未知/可变站点名称
- bash - 如何在文件中循环并按照 Openwrt 中的模板创建一个新文件?
- matlab - 制作从 MatLab 到 AutoCAD 画线的脚本时出现问题
- mysql - 如何发送查询?
- swift - 在swift iOS中以编程方式批量设置按钮图像