java - #Askfirebase 在 android 中的 firebase 回收器适配器中获取上一个项目值(POJO)

标签 java android firebase android-recyclerview firebase-realtime-database

AskFirebase 如何在不使用数据库查询的情况下获取 Firebase 回收器适配器中的先前项目值(POJO)。

// Set up FirebaseRecyclerAdapter with the Query
    Query postsQuery = getQuery(mDatabase);
    mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.item_post,
            PostViewHolder.class, postsQuery) {
        @Override
        protected void populateViewHolder(final PostViewHolder viewHolder, final Post model, final int position) {
            final DatabaseReference postRef = getRef(position);
            Log.e(TAG, "populateViewHolder: " + position);
            // Set click listener for the whole post view
            final String postKey = postRef.getKey();
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Launch PostDetailActivity
                    Intent intent = new Intent(getActivity(), PostDetailActivity.class);
                    intent.putExtra(PostDetailActivity.EXTRA_POST_KEY, postKey);
                    startActivity(intent);
                }
            });

            // Determine if the current user has liked this post and set UI accordingly
            if (model.stars.containsKey(getUid())) {

                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
            } else {

                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
            }

            // Bind Post to ViewHolder, setting OnClickListener for the star button
            viewHolder.bindToPost(model, new View.OnClickListener() {
                @Override
                public void onClick(View starView) {
                    // Need to write to both places the post is stored
                    Log.e(TAG, "new: ");
                    DatabaseReference globalPostRef = mDatabase.child("posts").child(postRef.getKey());
                    DatabaseReference userPostRef = mDatabase.child("user-posts").child(model.uid).child(postRef.getKey());

                    // Run two transactions
                    onStarClicked(globalPostRef);
                    onStarClicked(userPostRef);
                }
            });
        }


    };

    mRecycler.setAdapter(mAdapter);

假设它们是五个单元格列表,每当我面对列表中的第二个单元格时,我想根据第一个设置一个条件单元格值。那么我怎样才能获取第一个单元格的值呢?

我已经尝试使用 arraylist 来存储 Post 的 POJO 。但问题是,每当从 firebase 表中删除某个项目时,该项目 onDataChange 就会调用,但 populateViewHolder 不会调用。它们也是使用数据库查询获取先前数据的一种方法,即

DatabaseReference ref = getRef(position-1);
ref.addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                        Log.e(TAG, "CHild exist: ");
                        
                    } else {
                        Log.e(TAG, "no CHild exist: ");
                       
                    }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

但是我不想使用这个数据库查询,他们还有其他方法吗?

最佳答案

主题“回答和评论”的设计 Firebase 数据结构就像您的问题一样。 enter image description here

  • gdtdg6765rf 和 hjgdhs567hd 是 firebase 获取的唯一 key
  • hjgdhs567hd 是答案
  • gdtdg6765rf 是回答 hjgdhs567hd 的评论
  • 创建的是 -1*UNIX 订购时间戳
  • 日期、时间和要回答的答案已保存在评论中,答案所属
  • 如果要删除答案,请将所有标志设置为“deleted=1”,其中子项“toanswer=deleted answer key”再次填充

关于java - #Askfirebase 在 android 中的 firebase 回收器适配器中获取上一个项目值(POJO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933848/

相关文章:

firebase - Flutter firebase sendSignInLinkToEmail 不发送电子邮件并报告任何错误 iOS

java - 使用每个子类方法创建工厂对象

java - 如何在一行中打印多个字符串数组输出

java - 使用 PrintWriter 不输出到文件

android - 我应该使用什么来继续连接,我将在离散时间发送和获取数据?

php - Android - 使用 JSON 和 httpurlconnect 发送数据

android - 如何在 Firestore 中使用 'where'

java - 来自mysql数据库的数据JList和ComboBox

java - 使用反射加载 Build.getRadioVersion() 时出现 NoSuchMethodException

angular - 将 Angular 应用程序部署到 Firebase 托管 Github 操作