如何使用firebase在recyclerView中删除和编辑按钮

时间:2016-11-01 18:09:00

标签: android firebase android-recyclerview firebase-realtime-database

我正在使用firebase作为后端制作一个简单的博客应用程序。在应用程序中我在帖子详细信息活动中显示评论列表我想在每个评论的前面实现编辑和删除按钮,并且只有当当前用户写的评论时才想要显示它 这是我的postDetailActivity

我应该在哪里实现删除按钮 如果你需要任何其他信息评论,请帮帮我....

更新到FirbaseRecyclerView但现在删除按钮不起作用

public  class PostDetailActivity extends AppCompatActivity implements View.OnClickListener {

private static final String TAG = "PostDetailActivity";

public static final String EXTRA_POST_KEY = "post_key";

private DatabaseReference mPostReference;
private DatabaseReference mCommentsReference;
private ValueEventListener mPostListener;

protected String mPostKey;
private FirebaseRecyclerAdapter<Comment, CommentViewHolder> mAdapter;

private ImageView postPic;
private TextView mTitleView;
private TextView mBodyView;
private EditText mCommentField;
private Button mCommentButton;
public  Button del_comment;
private RecyclerView mCommentsRecycler;
private LinearLayoutManager mlinearLayoutManager;
private String commentKey;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_detail);

    // Get post key from intent
    mPostKey = getIntent().getStringExtra(EXTRA_POST_KEY);
    if (mPostKey == null) {
        throw new IllegalArgumentException("Must pass EXTRA_POST_KEY");
    }

    // Initialize Database
    mPostReference = FirebaseDatabase.getInstance().getReference()
            .child("posts").child(mPostKey);
    mCommentsReference = FirebaseDatabase.getInstance().getReference()
            .child("post-comments");

    // Initialize Views
   // mAuthorView = (TextView) findViewById(R.id.post_author);
    mTitleView = (TextView) findViewById(R.id.post_title);
    mBodyView = (TextView) findViewById(R.id.post_body);
    postPic = (ImageView) findViewById(R.id.form_details_image);
    mCommentField = (EditText) findViewById(R.id.field_comment_text);
    mCommentButton = (Button) findViewById(R.id.button_post_comment);
    del_comment = (Button) findViewById(R.id.remove_comment);
    mCommentsRecycler = (RecyclerView) findViewById(R.id.recycler_comments);

    mCommentButton.setOnClickListener(this);
    mCommentsRecycler.setHasFixedSize(true);
    mlinearLayoutManager = new LinearLayoutManager(this);


    mCommentsRecycler.setLayoutManager(mlinearLayoutManager);

}

private Query getcommentQuery(DatabaseReference mCommentsReference) {
    return mCommentsReference.child(mPostKey);
}

@Override
public void onStart() {
    super.onStart();

    // Add value event listener to the post
    // [START post_value_event_listener]
    ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            Post post = dataSnapshot.getValue(Post.class);
            // [START_EXCLUDE]
           // mAuthorView.setText(post.author);
            mTitleView.setText(post.title);
            mBodyView.setText(post.body);
            final String formImage = String.valueOf(post.postDetailPic);
            // [END_EXCLUDE]
            if (formImage.length() > 0) {
                Picasso.with(getApplicationContext()).load(formImage)
                        .networkPolicy(NetworkPolicy.OFFLINE)
                        .into(postPic, new Callback() {
                            @Override
                            public void onSuccess() {

                            }
                            @Override
                            public void onError() {
                                //Try again online if cache failed
                                Picasso.with(getApplicationContext())
                                        .load(formImage)
                                        //.error(R.drawable.ic_warning_black_24dp)
                                        .into(postPic, new Callback() {
                                            @Override
                                            public void onSuccess() {

                                            }

                                            @Override
                                            public void onError() {
                                                Log.v("Picasso","Could not fetch image");
                                            }
                                        });
                            }
                        });

            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
            // [START_EXCLUDE]
            Toast.makeText(PostDetailActivity.this, "Failed to load post.",
                    Toast.LENGTH_SHORT).show();
            // [END_EXCLUDE]
        }
    };
    mPostReference.addValueEventListener(postListener);
    // [END post_value_event_listener]

    // Keep copy of post listener so we can remove it when app stops
    mPostListener = postListener;


    // Listen for comments

    Query commentQuery = getcommentQuery(mCommentsReference);
    mAdapter = new FirebaseRecyclerAdapter<Comment, CommentViewHolder>(Comment.class,R.layout.item_comment,
            CommentViewHolder.class, commentQuery) {
        @Override
        protected void populateViewHolder(final CommentViewHolder viewHolder,final Comment model,final int position) {
            final  DatabaseReference commentRef = getRef(position);
             commentKey = commentRef.getKey();

            if (model.commenter_id.containsKey(gUid())){
                viewHolder.rm_comment.setVisibility(View.VISIBLE);
            }
            viewHolder.bindToPost(model, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     mCommentsReference.child(mPostKey).child(commentKey).removeValue();

                }
            });
        }
    };
    mCommentsRecycler.setAdapter(mAdapter);


}





@Override
public void onStop() {
    super.onStop();

    // Remove post value event listener
    if (mPostListener != null) {
        mPostReference.removeEventListener(mPostListener);
    }

    // Clean up comments listener
    mAdapter.cleanup();
}

@Override
public void onClick(View v) {
    int i = v.getId();
    if (i == R.id.button_post_comment) {
        postComment();
    }
}


private void postComment() {
    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
    assert mUser != null;
    final String uid = mUser.getUid();
    final DatabaseReference commentDb = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);
            commentDb.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    // Get user information
                    User user = dataSnapshot.getValue(User.class);
                    String authorName = user.name;
                    String commentUserPic = user.ProfilePic;



                    // Create new comment object
                    String commentText = mCommentField.getText().toString();

                    HashMap<String, Object> dateCreated;
                    {

                        //Otherwise make a new object set to ServerValue.TIMESTAMP
                        dateCreated = new HashMap<String, Object>();
                        dateCreated.put("timeStamp", ServerValue.TIMESTAMP);

                    }
                    HashMap<String,Boolean> commenter_id ;
                    {
                        commenter_id = new HashMap<String, Boolean>();
                        commenter_id.put(getUid(),true);
                    }
                    Comment comment = new Comment(uid, authorName, commentText, commentUserPic, dateCreated, commenter_id);

                    // Push the comment, it will appear in the list
                    mCommentsReference.push().setValue(comment);


                    // Clear the field
                    mCommentField.setText(null);


                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
}

private String getUid() {
    return FirebaseAuth.getInstance().getCurrentUser().getUid();
}






    private Context mContext;
    private DatabaseReference mDatabaseReference;
    private ChildEventListener mChildEventListener;
    private List<String> mCommentIds = new ArrayList<>();
    private List<Comment> mComments = new ArrayList<>();
    private String mkey;



       // mContext = context;
      //  mDatabaseReference = ref;

        // Create child event listener
        // [START child_event_listener_recycler]
        ChildEventListener childEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
                Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
                taskDeletion(dataSnapshot);
                // A new comment has been added, add it to the displayed list
                Comment comment = dataSnapshot.getValue(Comment.class);
                mkey = dataSnapshot.getKey();


                // [START_EXCLUDE]
                // Update RecyclerView
                mCommentIds.add(dataSnapshot.getKey());
                mComments.add(comment);
                mAdapter.notifyItemInserted(mComments.size() - 1);
                // [END_EXCLUDE]
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
                Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());

                // A comment has changed, use the key to determine if we are displaying this
                // comment and if so displayed the changed comment.
                Comment newComment = dataSnapshot.getValue(Comment.class);
                String commentKey = dataSnapshot.getKey();

                // [START_EXCLUDE]
                int commentIndex = mCommentIds.indexOf(commentKey);
                if (commentIndex > -1) {
                    // Replace with the new data
                    mComments.set(commentIndex, newComment);

                    // Update the RecyclerView
                    mAdapter.notifyItemChanged(commentIndex);
                } else {
                    Log.w(TAG, "onChildChanged:unknown_child:" + commentKey);
                }
                // [END_EXCLUDE]
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());

                // A comment has changed, use the key to determine if we are displaying this
                // comment and if so remove it.
                String commentKey = dataSnapshot.getKey();


                // [START_EXCLUDE]
                int commentIndex = mCommentIds.indexOf(commentKey);
                if (commentIndex > -1) {
                    // Remove data from the list
                    mCommentIds.remove(commentIndex);
                    mComments.remove(commentIndex);

                    // Update the RecyclerView
                   mAdapter.notifyItemRemoved(commentIndex);
                } else {
                    Log.w(TAG, "onChildRemoved:unknown_child:" + commentKey);
                }
                // [END_EXCLUDE]
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
                Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());

                // A comment has changed position, use the key to determine if we are
                // displaying this comment and if so move it.
                Comment movedComment = dataSnapshot.getValue(Comment.class);
                String commentKey = dataSnapshot.getKey();

                // ...

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w("PostDetailActivity", "postComments:onCancelled", databaseError.toException());
                Toast.makeText(mContext, "Failed to load comments.",
                        Toast.LENGTH_SHORT).show();
            }


        };

  // ref.addChildEventListener(childEventListener);
        // [END child_event_listener_recycler]

        // Store reference to listener so it can be removed on app stop
   //     mChildEventListener = childEventListener;


    private String gUid() {
        return FirebaseAuth.getInstance().getCurrentUser().getUid();
    }



    }

0 个答案:

没有答案