【问题标题】:How to implement override getItem() method in FirebaseRecyclerAdapter correctly如何在 FirebaseRecyclerAdapter 中正确实现覆盖 getItem() 方法
【发布时间】:2023-04-05 03:11:01
【问题描述】:

我正在使用 FirebaseRecyclerAdapter 从 firebase 数据库中检索数据。我正在使用 GridLayout 来显示数据。我的数据按 firebase 数据库中的 push() 键排序,我想以相反的顺序检索这些数据。我试过使用

mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);

很遗憾,GridLayout 不支持setStackFromEnd()。如果没有setStackFromEnd()setReverseLayout() 会颠倒数据顺序,但会在顶部留下空隙,这是不可接受的。

不过,我找到了this的答案

@Override
public Item getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}

来自另一个问题(我认为可能有效)并已尝试实施它。但是,我收到一个错误:“cannot resolve symbol Item”和“attempting to use in compatible return type for getItem(int)”。

说实话我不知道如何实现getItem()。如果有人知道如何解决这个问题,请帮忙!提前致谢!

目标: 实现 getItem() 代码,以尝试顺利地反转从 firebase 数据库检索到的 push() 数据(顶部没有任何间隙)。假设链接中的代码有效。

代码:

public class Browse extends Fragment {

    private FirebaseRecyclerAdapter<CategoryInformation, CategoryHolder> mFirebaseAdapter;

    private GridLayoutManager mLayoutManager;
    private RecyclerView rv;
    private DatabaseReference mDatabase;

    public Browse() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_browse, container, false);
        rv = rootView.findViewById(R.id.rv_recycler_view_browse);
        mLayoutManager = new GridLayoutManager(getContext(), 2);
        rv.setLayoutManager(mLayoutManager);

        mDatabase = FirebaseDatabase.getInstance().getReference().child("new");

        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();

        mFirebaseAdapter = new FirebaseRecyclerAdapter<CategoryInformation, CategoryHolder>(
                CategoryInformation.class,
                R.layout.card_item_browse,
                CategoryHolder.class,
                mDatabase) {

            @Override
            public Item getItem(int pos) {
                return super.getItem(getCount() - 1 - pos);
            }

            @Override
            public void populateViewHolder(CategoryHolder holder, CategoryInformation chat, final int position) {
Picasso.with(getContext()).load(chat.getImage()).into(holder.feed_image);

                holder.rating.setText(chat.getRating());
            }
        };
        rv.setAdapter(mFirebaseAdapter);
    }

    //ViewHolder for our Firebase UI
    public static class CategoryHolder extends RecyclerView.ViewHolder{

        ImageView feed_image;
        TextView rating;
        View mView;

        public CategoryHolder(View v) {
            super(v);
            feed_image = v.findViewById(R.id.feed_image);
            rating = v.findViewById(R.id.rating);
            mView = v;
        }
    }
}

【问题讨论】:

    标签: android firebase-realtime-database grid-layout android-recyclerview firebaseui


    【解决方案1】:

    我找到了答案。这只是一个愚蠢的错误。 Item 类实际上是模型。所以我把它重命名为我的模型名称CategoryInformation,它被修复了!

    @Override
    public CategoryInformation getItem(int pos) {
        return super.getItem(getCount() - 1 - pos);
    }
    

    【讨论】:

    • 您能提供您的型号吗?我无法解析getItem(),我得到Method does not override method from its super class
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多