EDIT: Désolé je me rends compte de votre commentaire que ma question n'était pas assez claire. Je vais poster un nouveau. Désolé pour cela et merci pour vos réponses
Je renseigne une liste à partir d'un fichier Json . Avec mon listadapter, je peux facilement affecter les données JSON appropriées à chaque ligne de ma liste. Cela fonctionne bien pour le texte, par exemple:
TextView tv = (TextView)ll.findViewById(R.id.descView);
tv.setText(i.desc);
Avec le code ci-dessus, chaque ligne sera correctement remplie par les bonnes données JSON.
Cependant, je ne parviens pas à faire la même chose pour une image. J'ai essayé de définir la bonne image à partir de mes données json en utilisant ceci:
ImageView iv = (ImageView)ll.findViewById(R.id.imgView);
iv.setBackgroundDrawable(context.getResources().getDrawable(i.img));
Je suppose que le type de mes paramètres est erroné: "setBackgroundDrawable" nécessite un paramètre extractible . "GetDrawable" nécessite un int . J'ai défini le type de mon champ img sur int, ça marche pas.
Une idée pourquoi?
Mon adaptateur de liste:
public class adapter extends ArrayAdapter<ListItems> {
int resource;
String response;
Context context;
//Initialize adapter
public ListItemsAdapter(Context context, int resource, List<ListItems> items) {
super(context, resource, items);
this.resource=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
//Get the current object
ListItems i = getItem(position);
//Inflate the view
if(convertView==null)
{
ll = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li;
li = (LayoutInflater)getContext().getSystemService(inflater);
li.inflate(resource, ll, true);
}
else
{
ll = (LinearLayout) convertView;
}
//For the message
TextView tv = (TextView)ll.findViewById(R.id.descView);
tv.setText(i.desc);
// For the Img
ImageView iv = (ImageView)ll.findViewById(R.id.imgView);
iv.setBackgroundDrawable(context.getResources().getDrawable(i.img));
return ll;
}
ma classe d'items:
public class ListItems{
int id;
int img;
String desc;}
Et un échantillon de mon fichier json:
[{"id":10001,"img":e1,"desc":"desc1"},
{"id":10002,"img":e2,"desc":"desc2"},
{"id":10003,"img":e3,"desc":"desc3"}]
Essaye ça
iv.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.img));
ou
iv.setBackgroundResource(R.drawable.img);
Maintenant, comme getDrawable
et setBackgroundDrawable
sont tous les deux depricated
vous devriez définir dessinable comme fond comme ceci:
view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable));
et si vous ciblez minSdk en dessous de 16 alors faites un test comme celui-ci:
if (Android.os.Build.VERSION.SDK_INT < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.your_drawable));
} else {
view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable));
}
Ici la nouvelle méthode
recyclerView.setBackgroundResource (R.drawable.edit_text_button_shape);
ne l'utilisez pas c'est une ancienne méthode recyclerView.setBackgroundDrawable (this.getResources (). getDrawable (edit_text_button_shape));