web-dev-qa-db-fra.com

Définir un dessin comme arrière-plan par programmation

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"}]
13
Don

Essaye ça

iv.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.img));

ou 

iv.setBackgroundResource(R.drawable.img);
40
peter

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));
    }
10
Kapil Rajput

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));

0
Black_Dreams