Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage d'une image

image stockée dans le folder Drawable

18 février 2021 à 14:37:00

Bonjour

J'ai créé une classe "Room" qui gère une liste de salle de réunion :

package com.example.mareu.Model;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Room {

    private long mId;
    private String mRoomName;
    private long mSeats;
    private String mImage;
    private static final List<Room> DUMMY_ROOMS = Arrays.asList(
            new Room( 1, "Etretat", 3 , "etretat.jpg"),
            new Room( 2, "Himalaya", 10, "himalaya.jpg" ),
            new Room( 3, "Laponie", 5, "laponie.jpg" ),
            new Room( 4, "Guadeloupe", 7, "guadeloupe.jpg" ),
            new Room( 5, "Etats Unis", 2, "canyon.jpg" ),
            new Room( 6, "Madagascar", 5,"madagascar.jpg" ),
            new Room( 7, "Rome", 20, "rome.jpg" ),
            new Room( 8, "Tahiti", 10, "tahiti.jpg" ),
            new Room( 9, "Thaïlande", 5, "thaïlande.jpg" ),
            new Room( 10, "Vietnam", 5, "vietnam.jpg"),
            new Room( 11, "Russie", 5, "kremlin.jpg")
    );

    public static List<Room> generateRooms() {
        return DUMMY_ROOMS;
    }

    public Room(long id, String mName, long seats, String image) {
        mId = id;
        mRoomName = mName;
        mSeats = seats;
        mImage = image;
    }


    public long getId() {
        return mId;
    }

    public String getRoomName() {
        return mRoomName;
    }

    public String getRoomImage() {
        return mImage;
    }

}

Je gère par ailleurs une liste de réunion que je dois afficher sur un écran liste. Voici ma classe Adapter :

package com.example.mareu.Activity;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.mareu.R;
import com.example.mareu.Model.Meeting;
import com.example.mareu.Model.Room;

import com.example.mareu.Service.MeetingApiService;

import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/**
 * {@link RecyclerView.Adapter} that can display a {@link Meeting}.
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private static final String TEXT_SEPARATOR = " - ";
    private List<Meeting> mMeetings;
    private MeetingApiService apiService;
    private Context context;

    @NonNull
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            context = parent.getContext();
            View view = LayoutInflater.from( parent.getContext() )
                .inflate( R.layout.fragment_item_list, parent, false );
        return new MyViewHolder( view );
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {

        // First line of the meeting : Subject - StartDate - Room
        String subjectMeeting = mMeetings.get( position ).getMeetingSubject();

        Date mDateDebut = mMeetings.get( position ).getMeetingDateDebut();
        DateFormat shortDateFormat = DateFormat.getDateTimeInstance(
                DateFormat.MEDIUM,
                DateFormat.MEDIUM, new Locale("FR","fr"));

        long mId = mMeetings.get(position).getIdRoom();
        List<Room> lRoomMeeting = Room.generateRooms();
        String mRoomName = lRoomMeeting.get( (int) mId ).getRoomName();
        String mRoomImage = lRoomMeeting.get( (int) mId ).getRoomImage();
        System.out.println(mRoomImage);

//        Context context = ;
        int id = context.getResources().getIdentifier("drawable/" + mRoomImage, null, null);
        holder.mMeetingRoomImage.setImageResource( id);

        // TextHolder for the first line
        String mFirstLineString = subjectMeeting + TEXT_SEPARATOR + shortDateFormat.format( mDateDebut ) + TEXT_SEPARATOR + mRoomName ;
        holder.mFirstLine.setText( mFirstLineString );

        // TextHolder for the second line
        String mGuestList = mMeetings.get(position).getMeetingGuestList();
        holder.mSecondLine.setText( mGuestList);

        // Delete button
        deleteButton( holder, position );
    }

    public void setData(List<Meeting> meetings) {
        this.mMeetings = meetings;
        notifyDataSetChanged(); // dit à l'adapter de se rafraichir
    }


    private void deleteButton(@NonNull MyViewHolder holder, final int position) {
        holder.mButtonDeleteMeeting.setOnClickListener( view -> {
            Toast.makeText( view.getContext(), "Suppression de la réunion " + mMeetings.get( position ).getMeetingSubject(), Toast.LENGTH_SHORT ).show();
            deleteItem( position );
            setData( mMeetings );
        } );
    }

    private void deleteItem(int position) {
        apiService.deleteMeeting( mMeetings.get( position ) );
    }

    @Override
    public int getItemCount() {
        return mMeetings.size();
    }

    static class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView mMeetingRoomImage;
        TextView mFirstLine;
        TextView mSecondLine;
        ImageButton mButtonDeleteMeeting;

        MyViewHolder(@NonNull View itemView) {
            super( itemView );
            mMeetingRoomImage = itemView.findViewById( R.id.item_image_meeting );
            mFirstLine = itemView.findViewById( R.id.item_meeting_first_line );
            mSecondLine = itemView.findViewById( R.id.item_meeting_second_line );
            mButtonDeleteMeeting = itemView.findViewById( R.id.item_image_meeting_delete );
        }
    }

}

Les images sont stockées au format jpg dans le folder "drawable". Je n'arrive pas à récupérer l'identifiant de l'image et à afficher l'image. Quelqu'un peut il m'aider ?


  • Partager sur Facebook
  • Partager sur Twitter