Я пытаюсь создать список изображений с recyclerView. Но изображения не отображаются в утилизаторе. Мой код:
// Активность:
Я установил onClick в кнопке, и пользователь может выбрать изображение из галереи. Затем код Добавить BitMap в список.
publi c класс AddRemoveRecyclerActivity расширяет AppCompatActivity {
private RecyclerView recyclerViewAddImages;
private ImageButton buttonAddNewImage;
private List<Imagem> listImagens = new ArrayList<>();
private String[] permissoesNecessarias = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE
};
private static final int SELECAO_GALERIA = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_remove_recycler);
//Validar Permissões:
Permissao.validarPermissoes(permissoesNecessarias, this, SELECAO_GALERIA);
//Inicializar Componentes:
recyclerViewAddImages = findViewById(R.id.recyclerViewAddImages);
buttonAddNewImage = findViewById(R.id.buttonAddNewImage);
//Set Adapter:
AdapterImagem adapter = new AdapterImagem(listImagens, this);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
recyclerViewAddImages.setLayoutManager(layoutManager);
recyclerViewAddImages.setHasFixedSize(true);
recyclerViewAddImages.setAdapter(adapter);
buttonAddNewImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adicionarImagem();
}
});
}
private void adicionarImagem(){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
if (i.resolveActivity(getPackageManager()) != null){
startActivityForResult(i, SELECAO_GALERIA);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
try {
switch (requestCode){
case SELECAO_GALERIA:
Uri localImagemSelecionada = data.getData();
InputStream imageStream = getContentResolver().openInputStream(localImagemSelecionada);
Bitmap imagem = BitmapFactory.decodeStream(imageStream);
if (imagem!= null){
Imagem imagemConfigurada = new Imagem();
imagemConfigurada.setImagem(imagem);
listImagens.add(imagemConfigurada);
}
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
В адаптере код получает Bitmap из списка и задает его в представлении изображения:
publi c класс AdapterImagem расширяет RecyclerView.Adapter {
List <Imagem> list;
Context context;
public AdapterImagem(List<Imagem> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_add_photo, parent, false);
return new AdapterImagem.MyViewHolder(item);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Imagem imagem = list.get(position);
holder.newImagem.setImageBitmap(imagem.getImagem());
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
ImageView newImagem;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
newImagem = itemView.findViewById(R.id.newImage);
}
}
}
Модель списка:
publi c класс Imagem {
private Bitmap imagem;
public Imagem() {
}
public Imagem(Bitmap imagem) {
this.imagem = imagem;
}
public Bitmap getImagem() {
return imagem;
}
public void setImagem(Bitmap imagem) {
this.imagem = imagem;
}
}