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 数据结构就像您的问题一样。
- 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/