【问题标题】:RecyclerView never focus on the last elementRecyclerView 从不关注最后一个元素
【发布时间】:2019-09-27 21:28:45
【问题描述】:

我正在尝试将 recyclerview 的最后一个元素设置为在拍照时对用户完全可见。

所以我使用了 recyclerview.smoothScrollToPosition(recycler.getAdapter().getItemCount() - 1);

但我总是看到倒数第二张照片。即使我将“- 1”更改为“+ 1”或“+ 4”甚至“+ 15”

我的 recyclerView 首先滚动到最后一个元素,然后将一个新元素添加到我的数组中。所以这样,它永远不会真正到达最后一个元素。应该是相反的。

有人可以帮忙吗?我错过了什么吗?

if (success) {
                File mFile = new File(mDir, new SimpleDateFormat("yyyyMMdd-HHmmss", Locale.getDefault()).format(new Date()) + ".jpg");

                mImageCapture.takePicture(mFile,
                        new ImageCapture.OnImageSavedListener() {
                            @Override
                            public void onImageSaved(@NonNull File file) {
                                mListOfPhotos.add(file.getAbsolutePath());

                                mAdapter.setmListOfPhotos(mListOfPhotos);
                                mRecyclerView.setAdapter(mAdapter);

                                actualNumberOfPhoto();

                                mRecyclerView.smoothScrollToPosition(mRecyclerView.getAdapter().getItemCount() - 1);
                                mAdapter.notifyDataSetChanged();
                            }

                            @Override
                            public void onError(@NonNull ImageCapture.ImageCaptureError imageCaptureError, @NonNull String message, @Nullable Throwable cause) {
                                String mMessage = "Photo capture failed: " + message;
                                Toast.makeText(CameraActivity.this, mMessage, Toast.LENGTH_SHORT).show();

                                assert cause != null;
                                cause.printStackTrace();
                            }
                        });
            }

编辑:

将代码写入actualNumberOfPhoto()

    private void actualNumberOfPhoto(RecyclerView recyclerView) {
        mNumberOfPhotoTV.setText(getResources().getString(R.string.minPhotos, mListOfPhotos.size()));

        mIDDemande = mSharedPreferences.getInt(ConstantsClass.EXTRA_ID_APPLICATION, 0);

        if (mIDDemande != 0) {
            if (mListOfPhotos.size() > 0) {
                mSendPhotoFAB.setVisibility(View.VISIBLE);
            } else if (mListOfPhotos.size() < 1) {
                mSendPhotoFAB.setVisibility(View.GONE);
            }
        } else if (mListOfPhotos.size() >= 6) {
            mSendPhotoFAB.setVisibility(View.VISIBLE);
        } else if (mListOfPhotos.size() < 6) {
            mSendPhotoFAB.setVisibility(View.GONE);
        }

    }

【问题讨论】:

  • 在 notifyDataSetChanged 方法下面调用你的 smoothScroll 方法。
  • 你在actualNumberOfPhoto(mRecyclerView);做了什么
  • 这个方法有什么作用mAdapter.setmListOfPhotos()?
  • @PratikButani 它将我的数组设置为我的适配器,我的回收器视图需要的数组。

标签: android android-recyclerview


【解决方案1】:

你的代码应该是这样的:

@Override
public void onImageSaved(@NonNull File file) {
    mListOfPhotos.add(file.getAbsolutePath());

    mAdapter.setmListOfPhotos(mListOfPhotos);

    mRecyclerView.setAdapter(mAdapter);

    mRecyclerView.smoothScrollToPosition(mListOfPhotos.size());

    //mAdapter.notifyDataSetChanged();
}

【讨论】:

  • 我觉得我的回收器视图首先滚动到最后一个元素,然后将一个新元素添加到我的数组中。所以这样,它永远不会真正到达最后一个元素。应该是相反的。
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多