这是我的主班,
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,如果需要更多信息,请随时询问。
答案 0 :(得分:0)
确定尝试以下操作: 创建一些我看到的具有图像和名称的类,并且类名称为Category:
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的活动
<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" />
和一个带有cardview的布局资源文件,您可以在其中显示类别的项目
<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>
下一个CategoryApater
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方法放置到适配器之后,
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中添加一些数据,看看是否正在显示。