我正在開發一款尋寶游戲應用程序,該應用程序會在回收站視圖中顯示要拍攝的物品列表。該列表是從 Firebase 加載的。有一個 onClickListener,因此當單擊列表中的一個項目時,它會打開相機,然后您拍照,我想在所選項目旁邊顯示圖像?,F在,當我拍照時,它會在回收視圖中顯示在多行上。例如,如果我選擇列表中的第 0 項并拍照,則該圖片將同時顯示在列表中的第 0 項和第 11 項上。我試圖讓它只顯示在所選項目上。我在添加圖像后嘗試使用 adapter.notifyDataSetChanged() 和 adapter.notifyItemChanged(tmpPosition) 但它們都在多行上顯示圖像。我知道只有列表中的一項得到更新。我現在的做法是創建一個名為 tmpPosition 的全局 int 變量。當您單擊列表中的項目時,我將 tmpPosition 設置為等于所選項目的索引。然后在 onActivityResult 中,我使用以下方法設置圖像:scavengerHuntItemsList.get(tmpPosition).setScavengerHuntImage(imageTaken);adapter.notifyDataSetChanged();從我的 MainActivity 這是打開相機的 onClickListener ((ScavengerHuntRecyclerAdapter) dapter).setOnItemClickListener(new ScavengerHuntRecyclerAdapter.ClickListener() { @Override public void onItemClick(int position, View v) { //Here I am saving the position of the item so later I can update the correct index in the list tmpPosition = position; dispatchTakePictureIntent(); } }); scavengerHuntMainRecyclerView.setAdapter(adapter); }我的相機來自 MainActivityprivate void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { File photoFile = null; photoFile = createPhotoFile(); if (photoFile != null) { pathToFile = photoFile.getAbsolutePath(); //gets the path to the image Uri photoURI = FileProvider.getUriForFile(ScavengerHuntMainActivity.this, "com.example.test", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } }}
1 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
發生這種情況是因為RecyclerView重用了它的視圖(項目/單元格)。單元格 1 的內容因此在單元格 11 中重復使用,導致照片出現多次。
這可以通過清除內容來解決ImageView。
if (currentItem.getScavengerHuntImage() != null) {
scavengerHuntViewHolder.scavengerHuntLayoutImageView.setImageBitmap(currentItem.getScavengerHuntImage());
Log.d("in adapter UPDATED POS", "position = " + i);
} else {
scavengerHuntViewHolder.scavengerHuntLayoutImageView.setImageResource(android.R.color.transparent);
//or
//scavengerHuntViewHolder.scavengerHuntLayoutImageView.setImageBitmap(null);
}
添加回答
舉報
0/150
提交
取消