2017-05-12 25 views
0

firebaseデータベースアイテムが削除され、onChildRemovedメソッドが呼び出されてもリストビューが更新されませんが、firebaseデータベースからアイテムを削除した後にリストビューを更新したいと思います。アプリは、更新されたリストビューを表示する。私はstackoverflowで利用可能なすべてを試してみました。firebaseデータベースからアイテムを削除した後にリストビューを更新するには?

 package com.example.agasthya.travelbooking; 

     import android.os.Bundle; 
     import android.support.v7.app.AppCompatActivity; 
     import android.util.Log; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.ListView; 
     import android.widget.ProgressBar; 

     import com.google.firebase.database.ChildEventListener; 
     import com.google.firebase.database.DataSnapshot; 
     import com.google.firebase.database.DatabaseError; 
     import com.google.firebase.database.DatabaseReference; 
     import com.google.firebase.database.FirebaseDatabase; 
     import com.google.firebase.database.Query; 
     import com.google.firebase.database.ValueEventListener; 

     import java.util.ArrayList; 
     import java.util.List; 




     public class MainActivity extends AppCompatActivity { 
      ChildEventListener mchild; 
      private ListView mMessageListView; 
      private MessageAdapter mMessageAdapter; 
      private ProgressBar mProgressBar; 
      private FirebaseDatabase mFirebaseDatabase; 

      private DatabaseReference mMessagesDataBaseReference; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       mFirebaseDatabase=FirebaseDatabase.getInstance(); 
       mMessageListView = (ListView) findViewById(R.id.messageListView); 

       mMessagesDataBaseReference=mFirebaseDatabase.getReference().child("travelbooking"); 
       final List<Messages> friendlyMessages = new ArrayList<>(); 

       mMessageAdapter = new MessageAdapter(this, R.layout.list_item, friendlyMessages); 
       mMessageListView.setAdapter(mMessageAdapter); 

       mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
       mProgressBar.setVisibility(ProgressBar.INVISIBLE); 



       mchild=new ChildEventListener() { 
        @Override 
        public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
         Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
         mMessageAdapter.add(friendlyMessage); 
        } 

        @Override 
        public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
        } 

        @Override 
        public void onChildRemoved(DataSnapshot dataSnapshot) {Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
         mMessageAdapter.remove(friendlyMessage); 
         mMessageAdapter.notifyDataSetChanged(); 
        } 

        @Override 
        public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }; 



       Button i =(Button)findViewById(R.id.button2); 
         i.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
          DatabaseReference ref = mFirebaseDatabase.getReference(); 
          Query applesQuery = mMessagesDataBaseReference; 

          applesQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) {int i=0; 
           for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) { 
            appleSnapshot.getRef().removeValue();i++; 





     if(i==1)break; 
           }} 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         });}}); 

       mMessagesDataBaseReference.addChildEventListener(mchild); 

      } 


       } 

メッセージアダプタクラス

  package com.example.agasthya.travelbooking; 


      import android.app.Activity; 
      import android.content.Context; 
      import android.view.View; 
      import android.view.ViewGroup; 
      import android.widget.ArrayAdapter; 
      import android.widget.TextView; 

      import com.google.firebase.database.ChildEventListener; 

      import java.util.List; 

      public class MessageAdapter extends ArrayAdapter<Messages> { 
       public MessageAdapter(ChildEventListener context, int resource, List<Messages> objects) { 
        super(context, resource, objects); 
       } 

       @Override 
       public View getView(int position, View convertView, ViewGroup parent) { 
        if (convertView == null) { 
         convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.list_item, parent, false); 
        } 


        TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView); 
        TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView); 
        TextView authorTextView2 = (TextView) convertView.findViewById(R.id.nameTextView2); 


        Messages message = getItem(position); 

         messageTextView.setText("From :"+message.getFrom()+"\n"); 

        authorTextView.setText("To :"+message.getTo()+"\n"); 
        authorTextView2.setText("Name :"+message.getName()+"\n"); 

        return convertView; 
       } 
      } 
+0

追加** MessageAdapter **クラスを試してみてください。 – saurabh

+0

メッセージアダプタクラスを追加しました –

答えて

0
package com.example.agasthya.travelbooking; 

     import android.os.Bundle; 
     import android.support.v7.app.AppCompatActivity; 
     import android.util.Log; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.ListView; 
     import android.widget.ProgressBar; 

     import com.google.firebase.database.ChildEventListener; 
     import com.google.firebase.database.DataSnapshot; 
     import com.google.firebase.database.DatabaseError; 
     import com.google.firebase.database.DatabaseReference; 
     import com.google.firebase.database.FirebaseDatabase; 
     import com.google.firebase.database.Query; 
     import com.google.firebase.database.ValueEventListener; 

     import java.util.ArrayList; 
     import java.util.List; 




     public class MainActivity extends AppCompatActivity { 
      ChildEventListener mchild; 
      private ListView mMessageListView; 
      private MessageAdapter mMessageAdapter; 
      private ProgressBar mProgressBar; 
      private FirebaseDatabase mFirebaseDatabase; 

      private DatabaseReference mMessagesDataBaseReference; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       mFirebaseDatabase=FirebaseDatabase.getInstance(); 
       mMessageListView = (ListView) findViewById(R.id.messageListView); 

       mMessagesDataBaseReference=mFirebaseDatabase.getReference().child("travelbooking"); 
       final List<Messages> friendlyMessages = new ArrayList<>(); 

       mMessageAdapter = new MessageAdapter(this, R.layout.list_item, friendlyMessages); 
       mMessageListView.setAdapter(mMessageAdapter); 

       mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
       mProgressBar.setVisibility(ProgressBar.INVISIBLE); 



       mchild=new ChildEventListener() { 
        @Override 
        public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
         Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
         mMessageAdapter.add(friendlyMessage); 
        } 

        @Override 
        public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
        } 

        @Override 
        public void onChildRemoved(DataSnapshot dataSnapshot) {Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
         mMessageAdapter = new MessageAdapter(this, R.layout.list_item, friendlyMessages); 
       mMessageListView.setAdapter(mMessageAdapter); 
        } 

        @Override 
        public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }; 



       Button i =(Button)findViewById(R.id.button2); 
         i.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
          DatabaseReference ref = mFirebaseDatabase.getReference(); 
          Query applesQuery = mMessagesDataBaseReference; 

          applesQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) {int i=0; 
           for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) { 
            appleSnapshot.getRef().removeValue();i++; 





     if(i==1)break; 
           }} 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         });}}); 

       mMessagesDataBaseReference.addChildEventListener(mchild); 

      } 


       } 

これを試してみてください。

+0

私はこれを試しました。私は、アクティビティのコンテキストであろうと、ChildEventListenerコンテキストであろうと、コンテキストの問題を受け取ります。 –

0
package com.example.agasthya.travelbooking; 

     import android.os.Bundle; 
     import android.support.v7.app.AppCompatActivity; 
     import android.util.Log; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.ListView; 
     import android.widget.ProgressBar; 

     import com.google.firebase.database.ChildEventListener; 
     import com.google.firebase.database.DataSnapshot; 
     import com.google.firebase.database.DatabaseError; 
     import com.google.firebase.database.DatabaseReference; 
     import com.google.firebase.database.FirebaseDatabase; 
     import com.google.firebase.database.Query; 
     import com.google.firebase.database.ValueEventListener; 

     import java.util.ArrayList; 
     import java.util.List; 




     public class MainActivity extends AppCompatActivity { 
      ChildEventListener mchild; 
      private ListView mMessageListView; 
      private MessageAdapter mMessageAdapter; 
      private ProgressBar mProgressBar; 
      private FirebaseDatabase mFirebaseDatabase; 

      private DatabaseReference mMessagesDataBaseReference; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       mFirebaseDatabase=FirebaseDatabase.getInstance(); 
       mMessageListView = (ListView) findViewById(R.id.messageListView); 

       mMessagesDataBaseReference=mFirebaseDatabase.getReference().child("travelbooking"); 
       final List<Messages> friendlyMessages = new ArrayList<>(); 

       mMessageAdapter = new MessageAdapter(this, R.layout.list_item, friendlyMessages); 
       mMessageListView.setAdapter(mMessageAdapter); 

       mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
       mProgressBar.setVisibility(ProgressBar.INVISIBLE); 



       mchild=new ChildEventListener() { 
        @Override 
        public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
         Messages message = dataSnapshot.getValue(Messages.class); 
         friendlyMessage.add(message); 
         mMessageAdapter.notifyDataSetChanged(); 
        } 

        @Override 
        public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
        } 

        @Override 
        public void onChildRemoved(DataSnapshot dataSnapshot) { 
         Messages message = dataSnapshot.getValue(Messages.class); 
         friendlyMessages.remove(message); 
         mMessageAdapter.notifyDataSetChanged(); 
        } 

        @Override 
        public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }; 



       Button i =(Button)findViewById(R.id.button2); 
         i.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
          DatabaseReference ref = mFirebaseDatabase.getReference(); 
          Query applesQuery = mMessagesDataBaseReference; 

          applesQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) {int i=0; 
           for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) { 
            appleSnapshot.getRef().removeValue();i++; 





     if(i==1)break; 
           }} 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         });}}); 

       mMessagesDataBaseReference.addChildEventListener(mchild); 

      } 


       } 

このコードをお試しください。

+0

コードありがとうございますが、リストビューはまだ更新されていません。 –

+0

アイテムはfirebaseデータベースから削除されますが、リストビューは私のコードと同じように更新されません。 –

0
package com.example.agasthya.travelbooking; 

    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.ListView; 
    import android.widget.ProgressBar; 

    import com.google.firebase.database.ChildEventListener; 
    import com.google.firebase.database.DataSnapshot; 
    import com.google.firebase.database.DatabaseError; 
    import com.google.firebase.database.DatabaseReference; 
    import com.google.firebase.database.FirebaseDatabase; 
    import com.google.firebase.database.Query; 
    import com.google.firebase.database.ValueEventListener; 

    import java.util.ArrayList; 
    import java.util.List; 




    public class MainActivity extends AppCompatActivity implements ChildEventListener { 
     ChildEventListener mchild; 
     private ListView mMessageListView; 
     private MessageAdapter mMessageAdapter; 
     private ProgressBar mProgressBar; 
     private FirebaseDatabase mFirebaseDatabase; 

     private DatabaseReference mMessagesDataBaseReference; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      mFirebaseDatabase=FirebaseDatabase.getInstance(); 
      mMessageListView = (ListView) findViewById(R.id.messageListView); 

      mMessagesDataBaseReference=mFirebaseDatabase.getReference().child("travelbooking"); 
      final List<Messages> friendlyMessages = new ArrayList<>(); 

      mMessageAdapter = new MessageAdapter(this, R.layout.list_item, friendlyMessages); 
      mMessageListView.setAdapter(mMessageAdapter); 

      mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
      mProgressBar.setVisibility(ProgressBar.INVISIBLE); 



      mchild= (ChildEventListener) this; 



      Button i =(Button)findViewById(R.id.button2); 
        i.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
         DatabaseReference ref = mFirebaseDatabase.getReference(); 
         Query applesQuery = mMessagesDataBaseReference; 

         applesQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) {int i=0; 
          for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) { 
           appleSnapshot.getRef().removeValue();i++; 





    if(i==1)break; 
          }} 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        });}}); 

      mMessagesDataBaseReference.addChildEventListener(mchild); 

     } 

       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
        Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
        mMessageAdapter.add(friendlyMessage); 
       } 

       @Override 
       public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
       } 

       @Override 
       public void onChildRemoved(DataSnapshot dataSnapshot) {Messages friendlyMessage = dataSnapshot.getValue(Messages.class); 
        mMessageAdapter.remove(friendlyMessage); 
        mMessageAdapter.notifyDataSetChanged(); 
       } 

       @Override 
       public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
    } 

あなたの質問にこの

+0

このコードもうまくいきません。 –

関連する問題