FirebaseRecyclerAdapter没有显示任何内容

问题描述 投票:0回答:1

这是我的主课,

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,如果需要更多信息,请随时询问。

android
1个回答
0
投票

好试试这个:创建一个类,我看到你有图像和名称,类名是类别:

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" />

还有一个带有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 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();
}

最后尝试直接在Fire数据库Firestore中添加一些数据,看看是否正在显示。

© www.soinside.com 2019 - 2024. All rights reserved.