【发布时间】: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