物品没有出现在recyclerview中

时间:2018-08-03 06:48:18

标签: android android-activity android-recyclerview

我发送评论时遇到问题,该评论未出现在RecyclerView中,我必须返回并重新打开Activity才能看到我的回复。

BlogSingleActivity.java

public class BlogSingleActivity extends AppCompatActivity {

    private String mPost_key = null;
    DatabaseReference mDatabase;
    private ImageView mBlogSingleImage;
    private TextView mBlogSingleTitle;
    private TextView mBlogSingleDesc;
    private TextView mBlogSingleUsername, mNumbersOfComments;

    private TextView mBlogSingleDate;
    private DatabaseReference ReplayDatabase;

    private RecyclerView mReplayBlogList;
    private TextView emptyView;
    FirebaseRecyclerAdapter<Blog, BlogViewHolder> mAdapter;

    private EditText mReplayText;
    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    private DatabaseReference mDatabaseUser;
    private Uri mImagUri = null;
    private static final int GALLERY_REQUEST = 2;
    private StorageReference mStorage;
    private ImageButton mselectImage;
    Button sendBTN;
    private ProgressDialog mProgress;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blog_single);
        mPost_key = getIntent().getExtras().getString("blog_id");
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
        ReplayDatabase = FirebaseDatabase.getInstance().getReference().child("Replay");


        mBlogSingleDesc = findViewById(R.id.singleBlogDesc);
        mBlogSingleTitle = findViewById(R.id.post_Tittle);
        mBlogSingleImage = findViewById(R.id.singleBlogImage);
        mBlogSingleUsername = findViewById(R.id.singleBlogUsername);
        mBlogSingleDate = findViewById(R.id.singleBlogDate);
        mNumbersOfComments = findViewById(R.id.numberofcomments);


        assert getSupportActionBar() != null;
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        mReplayBlogList = findViewById(R.id.replay_blog_list);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);
        mReplayBlogList.setLayoutManager(layoutManager);
        mReplayBlogList.setNestedScrollingEnabled(false);
        emptyView = findViewById(R.id.empty_view);
        chickitem();

        mAuth = FirebaseAuth.getInstance();
        mCurrentUser = mAuth.getCurrentUser();
        mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid());
        mReplayText = findViewById(R.id.ReplayField);
        mStorage = FirebaseStorage.getInstance().getReference();
        mselectImage = findViewById(R.id.replayImageSelect);
        sendBTN = findViewById(R.id.send_BTN);

        getfirebaseData();
        mProgress = new ProgressDialog(this);


        mselectImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                galleryIntent.setType("image/*");
                startActivityForResult(galleryIntent, GALLERY_REQUEST);
            }
        });

        sendBTN.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startReplay();
                getfirebaseData();;
                disappearKeyboard();
                mReplayText.getText().clear();
                mselectImage.setImageResource(R.mipmap.add_btn);
                mselectImage.setBackgroundColor(getResources().getColor(R.color.image_background_color));
            }
        });

        mDatabase.child(mPost_key).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                String post_title = (String) dataSnapshot.child("tittle").getValue();
                String post_desc = (String) dataSnapshot.child("desc").getValue();
                String post_image = (String) dataSnapshot.child("image").getValue();
                String post_username = (String) dataSnapshot.child("username").getValue();
                Object post_date = dataSnapshot.child("date").getValue();

                Blog timeStamp = new Blog();
                timeStamp.setDate(post_date);
                if (timeStamp.getDate() != null) {
                    String datee = timeStamp.getDate().toString();
                    long time = Long.parseLong(datee);
                    String timeAgo = TimeAgo.getTimeAgo(time);
                    mBlogSingleDate.setText(timeAgo);
                }


                mBlogSingleTitle.setText(post_title);
                mBlogSingleDesc.setText(post_desc);
                mBlogSingleUsername.setText(post_username);
                Picasso.with(BlogSingleActivity.this)
                        .load(post_image)
                        .into(mBlogSingleImage);


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void disappearKeyboard() {

        InputMethodManager inputManager =
                (InputMethodManager) this.
                        getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(
                this.getCurrentFocus().getWindowToken(),
                InputMethodManager.HIDE_NOT_ALWAYS);
    }

    private void startReplay() {
        {

            final String replay_val = mReplayText.getText().toString().trim();
            //send date to firebase database


            if (!TextUtils.isEmpty(replay_val) && mImagUri != null) {
                mProgress.setMessage("جاري الإرسال....");
                mProgress.show();

                StorageReference filepath = mStorage.child("Replay_Images").child(mImagUri.getLastPathSegment());

                filepath.putFile(mImagUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                        if (mAuth.getCurrentUser() != null) {

                            @SuppressWarnings("VisibleForTests") final Uri downloadUrl = taskSnapshot.getDownloadUrl();


                            final DatabaseReference newPost = ReplayDatabase.child(mPost_key).push();

                            mDatabaseUser.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {

                                    if (dataSnapshot.getValue() != null) {
                                        newPost.child("replayimage").setValue(downloadUrl.toString());
                                        newPost.child("replay").setValue(replay_val);
                                        newPost.child("replaydate").setValue(ServerValue.TIMESTAMP);
                                        newPost.child("uid").setValue(mCurrentUser.getUid());
                                        newPost.child("replayname").setValue(dataSnapshot.child("name").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                if (task.isSuccessful()) {
                                                    chickitem();
                                                    mAdapter.notifyDataSetChanged();

                                                }

                                            }

                                        });
                                    }


                                }

                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            });
                            mProgress.dismiss();

                        }
                    }
                });
            } else if ((!TextUtils.isEmpty(replay_val))) {

                mProgress.setMessage("جاري الإرسال....");
                mProgress.show();

                if (mAuth.getCurrentUser() != null) {


                    final DatabaseReference newPost = ReplayDatabase.child(mPost_key).push();

                    mDatabaseUser.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            if (dataSnapshot.getValue() != null) {
                                newPost.child("replay").setValue(replay_val);
                                newPost.child("replaydate").setValue(ServerValue.TIMESTAMP);
                                newPost.child("uid").setValue(mCurrentUser.getUid());
                                newPost.child("replayname").setValue(dataSnapshot.child("name").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {

                                            chickitem();
                                            mAdapter.notifyDataSetChanged();

                                        }
                                    }

                                });

                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                    mProgress.dismiss();
                }

            }

        }
    }

    private void getfirebaseData() {


        mAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
                Blog.class,
                R.layout.replay_row,
                BlogViewHolder.class,
                ReplayDatabase.child(mPost_key)

        ) {
            @Override
            protected void populateViewHolder(final BlogViewHolder viewHolder, final Blog model, int position) {

                viewHolder.setReplay(model.getReplay());
                viewHolder.setReplayname(model.getReplayname());
                viewHolder.setReplaydate(model.getReplaydate());
                viewHolder.setReplayimage(getApplicationContext(), model.getReplayimage());

            }
        };
        mReplayBlogList.setAdapter(mAdapter);


    }

    public static class BlogViewHolder extends RecyclerView.ViewHolder {
        View mView;
        ImageView replay_imagee;
        TextView recive_replay, post_replayname, post_replaydate;



        public BlogViewHolder(View itemView) {

            super(itemView);

            mView = itemView;


        }

        public void setReplay(String replay) {
            recive_replay = mView.findViewById(R.id.replay_text);
            recive_replay.setText(replay);
        }

        public void setReplayname(String replayname) {
            post_replayname = mView.findViewById(R.id.replayer_name_field);
            post_replayname.setText(replayname);
        }

        public void setReplaydate(Object relaydate) {


            post_replaydate =  mView.findViewById(R.id.post_replaydate);
            Blog timeStamps = new Blog();
            timeStamps.setDate(relaydate);
            if (timeStamps.getDate()!=null){
                String dateee = timeStamps.getDate().toString();
                long times = Long.parseLong(dateee);
                String timeAgoo = TimeAgo.getTimeAgo(times);
                post_replaydate.setText(timeAgoo);




            }

        }

        public void setReplayimage(final Context ctx, final String replayimage) {

            replay_imagee = mView.findViewById(R.id.replay_image);

            Picasso.with(ctx).load(replayimage).networkPolicy(NetworkPolicy.OFFLINE).into(replay_imagee, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(ctx).load(replayimage).into(replay_imagee);

                }
            });

        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK) {

            Uri imageUri = data.getData();
            CropImage.activity(imageUri)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1, 1)
                    .start(this);
        }

        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                mImagUri = result.getUri();
                mselectImage.setImageURI(mImagUri);

            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                Exception error = result.getError();
            }
        }
    }

    private void chickitem() {


        final AtomicInteger count = new AtomicInteger();



        ReplayDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                long numChildren = dataSnapshot.child(mPost_key).getChildrenCount();

                if (numChildren == 0) {

                    emptyView.setVisibility(View.VISIBLE);
                    emptyView.setText("لا توجد تعليقات");
                    mReplayBlogList.setVisibility(View.INVISIBLE);
                    mNumbersOfComments.setText("لا توجد تعليقات");

                } else {
                    mNumbersOfComments.setText("" + numChildren);
                    emptyView.setVisibility(View.VISIBLE);
                    emptyView.setText("التعليقات...");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

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

    }
    @Override
    public void onResume(){
        super.onResume();
        getfirebaseData();

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case android.R.id.home:
                finish();
                return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

屏幕看起来像this

有两条评论。要查看这些评论,我必须返回并重新打开此Activity

1 个答案:

答案 0 :(得分:0)

对此我不是100%肯定,但是我认为您在mReplayBlogList.notifyDataSetChanged();的{​​{1}}行之后缺少mReplayBlogList.setAdapter(mAdapter);

也许您可以尝试一下。让我知道它是否解决了:)