studio recyclerview mostrar llenar firebaserecycleradapter datos curso consultas con android firebase android-recyclerview firebase-database

android - mostrar - llenar un recyclerview con firebase



Cómo eliminar elementos de firebase RecyclerView (2)

Actualmente estoy trabajando en Agregar amigos con la ayuda de Firebase RecyclerView en la que si un usuario toca el botón AGREGAR, se agrega en la base de datos n que el elemento tocado es necesario eliminarlo de forma permanente ... entonces, cómo lograrlo a través del modelo de Firebase ya que no tenemos ninguna lista de datos para eliminar de ..

Aquí está el código

@Override public void onStart(){ super.onStart(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); EmailPref=prefs.getString("EmailPref", EmailPref); if(EmailPref!=null){ final Firebase ref = new Firebase(constants.FIREBASE_URL+"rootssahaj/authGplus"); FirebaseRecyclerAdapter<FriendsData,FriendsViewHolder> adapter=new FirebaseRecyclerAdapter<FriendsData, FriendsViewHolder>( FriendsData.class, R.layout.chat_view_list, FriendsViewHolder.class, ref ) { @TargetApi(Build.VERSION_CODES.KITKAT) @Override protected void populateViewHolder(FriendsViewHolder friendsViewHolder, FriendsData s, int position) { String key = this.getRef(position).getKey(); Log.e("SahajLOG", "String Keyyy " + key + " n EmailPref" + EmailPref); if (!Objects.equals(key, EmailPref)) { friendsViewHolder.mName.setText(s.getUserNAME()); Picasso.with(context).load(s.getPicurl()).transform(new CircleTransform()).into(friendsViewHolder.mImageProfile); String keylocal = key; Log.e("pavan", "Populate AddF key" + keylocal+" " + position); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); prefs.getString("keylocal" + position, keylocal + position); if (keylocal != null) { prefs.edit().putString("keylocal" + position, keylocal + position).commit(); } } else { friendsViewHolder.mCardView.setVisibility(View.GONE); //friendsViewHolder.setVisibility(View.GONE); } } }; recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setItemAnimator(new SlideInLeftAnimator()); recyclerView.getItemAnimator().setAddDuration(1000); recyclerView.getItemAnimator().setRemoveDuration(1000); recyclerView.getItemAnimator().setMoveDuration(1000); recyclerView.getItemAnimator().setChangeDuration(1000); SlideInLeftAnimator animator = new SlideInLeftAnimator(); animator.setInterpolator(new OvershootInterpolator()); recyclerView.setItemAnimator(animator); AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAdapter(adapter); alphaAdapter.setDuration(500); alphaAdapter.setInterpolator(new OvershootInterpolator(.5f)); alphaAdapter.setFirstOnly(false); recyclerView.setAdapter(new ScaleInAnimationAdapter(alphaAdapter)); } } public class FriendsViewHolder extends RecyclerView.ViewHolder{ ImageView mImageProfile; android.widget.TextView mName; private int mVisibility; Boolean CallAdd=false; Button mAdd; String keylocal; CardView mCardView; public FriendsViewHolder(View itemView) { super(itemView); mCardView=(CardView)itemView.findViewById(R.id.cardView); mImageProfile=(ImageView)itemView.findViewById(R.id.profilePICC); mName=(android.widget.TextView)itemView.findViewById(R.id.NameUSER); context = itemView.getContext(); mAdd=(Button)itemView.findViewById(R.id.addButton); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); if(prefs.getBoolean("CallAdd", CallAdd)){ AddaddButton(); } mAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); EmailPref = prefs.getString("EmailPref", EmailPref); keylocal=prefs.getString("keylocal"+getAdapterPosition(),keylocal+getAdapterPosition()); final Firebase mFirebaseRef = new Firebase(constants.FIREBASE_URL + "rootssahaj/authGplus/"+ EmailPref); mFirebaseRef.child("friends").child(keylocal).setValue("true"); Log.e("pavan", "Chat Adapter " + EmailPref + keylocal + " final key: " + keylocal); //remove(getAdapterPosition()); } }); } public void AddaddButton(){ if (mAdd.getVisibility() == View.INVISIBLE) { mAdd.setVisibility(View.VISIBLE); } } }


FirebaseUI FirebaseRecyclerAdapter es una representación directa de los datos en la ubicación subyacente de Query o Firebase . Para eliminar un elemento del adaptador (y vista), debe eliminarlo de la ubicación de Firebase (o asegurarse de que ya no coincida con la consulta).

Entonces, cuando el usuario desencadena la eliminación (por ejemplo, al hacer clic en un elemento en una posición determinada):

adapter.getRef(position).remove()

También vea este problema en el repositorio FirebaseUI Github .


Si miras este código, eliminará una Nota de Firebase cuando se haga clic en la Nota. Parece sencillo si entiendes una consulta de Firebase. Esto también actualizará el RecyclerView una vez que el adaptador RecyclerView esté configurado correctamente. No necesita una Lista de datos, solo el valor de lo que desea eliminar, como una ID o una clave.

@Override public void onLongClick(View v, int i) { mquery.orderByChild("text") .equalTo((String) notes.get(i).getName()) .addListenerForSingleValueEvent(new ValueEventListener() { public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.hasChildren()) { DataSnapshot firstChild = dataSnapshot.getChildren().iterator().next(); firstChild.getRef().removeValue(); } } public void onCancelled(FirebaseError firebaseError) { } });

El FirebaseRecyclerAdapter.class de https://github.com/mmazzarolo/firebase-recyclerview funciona. Acabo de copiar y pegar, en su mayor parte. Esta es una clase abstracta que puede usar para crear un adaptador RecyclerView para su base de datos de Firebase. Todo el código está en ese repositorio de GitHub para usted. Aquí hay un fragmento de FirebaseRecyclerAdapter.class que elimina el valor de Firebase Y actualiza el recyclerView:

@Override public void onChildRemoved(DataSnapshot dataSnapshot) { String key = dataSnapshot.getKey(); if (mKeys.contains(key)) { int index = mKeys.indexOf(key); T item = mItems.get(index); mKeys.remove(index); mItems.remove(index); notifyItemRemoved(index); itemRemoved(item, key, index); } }

ACTUALIZACIÓN: puede ocultar una vista en el Visualizador del adaptador RecyclerView. mira estas respuestas en Ocultando vistas en RecyclerView