【发布时间】:2020-07-11 11:47:21
【问题描述】:
我有一个包含 Users>userUID>Favorites 的 Firebase 数据库,在这个“Favorite”节点中,我有一些用户保存到您最喜欢的帖子的列表,但我想在 RecyclerView 中显示一个仅包含帖子的列表已保存,并且帖子在另一个节点帖子>...我该怎么做,我的意思是,仅获取已保存的帖子并从另一个节点搜索以显示在 RecyclerView 中??
这是我用来添加到用户收藏列表的代码
private void favoritos() {
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference( "Usuarios" );
ref.child( mAuth.getUid() ).child( "Favoritos" ).child( posicao )
.addListenerForSingleValueEvent( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.getKey().equals( posicao )) {
botaoFavorito.setImageResource( R.drawable.ic_favoritos );
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference( "Usuarios" );
ref.child( mAuth.getUid() ).child( "Favoritos" ).child( posicao ).setValue( null );
}
} else {
botaoFavorito.setImageResource( R.drawable.ic_favorito_adicionado );
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference( "Usuarios" );
ref.child( mAuth.getUid() ).child( "Favoritos" ).child( posicao ).setValue( posicao );
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
} );
}
这就是我的 RecyclerView 显示数据的方式
recyclerView = findViewById( R.id.recyclerFavoritos );
recyclerView.setHasFixedSize( true );
layoutDeCarregamento = new LinearLayoutManager( this );
layoutDeCarregamento.setReverseLayout( true );
layoutDeCarregamento.setStackFromEnd( true );
//Definindo o 'Layout'
recyclerView.setLayoutManager( layoutDeCarregamento );
firebaseDatabase = FirebaseDatabase.getInstance();
//Pegando os dados da tabela de referência
mRef = firebaseDatabase.getReference( "Usuarios" );
mRef.child( uid ).child( "Favoritos" );
FirebaseRecyclerAdapter<Noticias, dados_noticias> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Noticias, dados_noticias>(
Noticias.class,
R.layout.card_noticias,
dados_noticias.class,
mRef
) {
@Override
//Método para fazer o preenchimento dos dados na 'Recycler View'
protected void populateViewHolder(dados_noticias viewHolder, Noticias noticias, int i) {
viewHolder.setDetails( getBaseContext(), noticias.getTitulo(), noticias.getImagem_titulo(), noticias.getVisualizacoes(), noticias.getData(), noticias.getConteudo(), noticias.getPos() );
}
@Override
public dados_noticias onCreateViewHolder(final ViewGroup parent, int viewType) {
final dados_noticias viewHolder = super.onCreateViewHolder( parent, viewType );
viewHolder.setOnClickListener( new dados_noticias.ClickListener() {
@Override
public void onItemClick(View view, int position) {
}
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText( getApplicationContext(), "Ooops, erro aqui!", Toast.LENGTH_SHORT ).show();
}
} );
return viewHolder;
}
};
//Mandando o adapter para o 'Recycler View'
recyclerView.setAdapter( firebaseRecyclerAdapter );
【问题讨论】:
标签: android firebase firebase-realtime-database