Affichage d'une image stockée dans le folder drawable
Résolu
Elona
-
Elona -
Elona -
Bonjour,
J'ai créé une classe "Room" qui gère une liste de salle de réunion :
et une classe adapter :
Le soucis est que je n'arrive pas à afficher l'image correspondant à la salle de réunion.
Quelqu'un peut il m'aider ?
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; } }
et une 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 ); } }}
Le soucis est que je n'arrive pas à afficher l'image correspondant à la salle de réunion.
Quelqu'un peut il m'aider ?
Configuration: Windows / Chrome 88.0.4324.150
A voir également:
- Affichage d'une image stockée dans le folder drawable
- Appdata folder - Guide
- Folder colorizer - Télécharger - Divers Utilitaires
- Folder marker - Télécharger - Bureautique
- Image iso - Guide
- Légender une image - Guide
2 réponses
Bonjour,
Pour accéder aux ressources dans le dossier Drawable, rien de plus simple
Par contre, tu ne peux pas "construire l'id" de manière dynamique, étant donné que l'ID est généré à la création de l'app
Note : je me suis permis de reformatter ton code avec des balises plus adéquates
Pour accéder aux ressources dans le dossier Drawable, rien de plus simple
holder.mMeetingRoomImage.setImageResource(R.drawable.room);
Par contre, tu ne peux pas "construire l'id" de manière dynamique, étant donné que l'ID est généré à la création de l'app
Note : je me suis permis de reformatter ton code avec des balises plus adéquates
Hello
J'ai finalement réussi.
String mRoomImage = lRoomMeeting.get( mId-1 ).getRoomImage();
Integer keyImg= context.getResources().getIdentifier(mRoomImage, "drawable", context.getPackageName());
holder.mMeetingRoomImage.setImageResource( keyImg);
Tu peux rendre l'affichage dynamique en allant récupérer l'identifiant de l'image juste avant le holder......
Merci pour ton aide
J'ai finalement réussi.
String mRoomImage = lRoomMeeting.get( mId-1 ).getRoomImage();
Integer keyImg= context.getResources().getIdentifier(mRoomImage, "drawable", context.getPackageName());
holder.mMeetingRoomImage.setImageResource( keyImg);
Tu peux rendre l'affichage dynamique en allant récupérer l'identifiant de l'image juste avant le holder......
Merci pour ton aide