2016-03-27 10 views
4

Şu anda bir kullanıcı ADD düğmesine dokunduğunda, n öğesine dokunan öğenin kalıcı olarak kaldırılması gerektiğini belirten firebase RecyclerView yardımı ile Arkadaşlarıma Ekleme üzerinde çalışıyorum. biz kaldırmak herhangi bir veri listesi yok gibi. bu yüzden, nasıl Firebase modeli yoluyla bunu başarmak için .. İşte Firebase'deki öğeler nasıl kaldırılır RecyclerView

kodu

@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); 
     } 
    } 

} 
var

cevap

4

Bu koda bakarsanız, Not'a tıklandığında Firebase'den bir Not kaldırır. Bir Firebase sorgusunu anlıyorsanız hemen ileriye görünüyor. Bu, RecyclerView bağdaştırıcısı doğru şekilde kurulduğunda RecyclerView öğesini de güncelleyecektir. Bir Veri Listesi'ne, bir kimliğe veya bir anahtara benzer şekilde, kaldırmak istediğiniz şeylerin değerine ihtiyacınız yoktur.

 @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) { 
         } 
        }); 

FirebaseRecyclerAdapter.classhttps://github.com/mmazzarolo/firebase-recyclerview gelen eserleri. Çoğunlukla kopyaladım ve yapıştırdım. Bu Firebase veritabanınız için bir RecyclerView adaptörü yapmak için kullanabileceğiniz soyut bir sınıftır. Tüm kod sizin için GitHub deposunda.

@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); 
     } 
    } 

GÜNCELLEME: İşte recyclerView Firebase değeri kaldırır VE günceller FirebaseRecyclerAdapter.class gelen snippet'idir Sen RecyclerView adaptörün Viewholder bir görünüm gizleyebilirsiniz. Bu cevaplara bakın stackoverflow Hiding views in RecyclerView

+0

aslında ben sadece bu veriyi göstermek için firebase verileri kaldırmak istemiyorum, reclylerview yani –

+0

ekledim arkadaşım bunu yansıtmak için sorunuzu düzenlemelisiniz. – ChrisR

10

FirebaseUI FirebaseRecyclerAdapter verilerin doğrudan bir temsilidir Altta yatan Query veya Firebase yeri. Bir öğeyi bağdaştırıcıdan (ve görüntüden) kaldırmak için, Firebase konumundan kaldırmanız gerekir (veya sorguyla eşleşmediğinden emin olun).

kullanıcı (örneğin belli bir pozisyonda bir öğenin üzerine tıklayarak) silme tetikler Yani:

adapter.getRef(position).remove() 

Ayrıca, bu issue in the FirebaseUI Github repo bakın.

+0

ohh, bu yöntemi doğrudan kullanmış olsaydım bu düğümün veritabanından kaldırılacağı anlamına gelir –

+1

Bu tam satırı kullanıyorum (ancak gerçekten adapter.getRef (position) .removeValue()) longClick gerçekleştirin. Öğe silinir, ancak recyclerview artık güncellenmez. Bu sorunu – ChrisR

+0

aynı soruna, silinen öğeyi recyclerview'den nasıl silebilirim? –