Установите программный вариант для вывода

EDIT: Извините, я понимаю из вашего комментария, мой вопрос был недостаточно ясным. Я отправлю новый. Извините за это и спасибо за ваши ответы

Я заполняю список из файла Json. С моим списком, я могу легко назначить соответствующие json-данные для каждой строки моего списка. Это хорошо работает для текста, например:

TextView tv = (TextView)ll.findViewById(R.id.descView);   
tv.setText(i.desc);

С помощью приведенного выше кода каждая строка будет правильно заполнена хорошими json-данными.

Однако мне не удается сделать то же самое для изображения. Я попытался установить правильное изображение из моих json-данных, используя это:

ImageView iv = (ImageView)ll.findViewById(R.id.imgView);           
iv.setBackgroundDrawable(context.getResources().getDrawable(i.img));

Я предполагаю, что я делаю что-то не так с типом моих параметров: "setBackgroundDrawable" требует параметра drawable. "getDrawable" требует int. Я установил тип моего поля img для int, но это не работает.

Любая идея, почему?

Мой адаптер списка:

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

мой класс предмета:

    public class ListItems{
int id;
int img;    
String desc;}

И образец моего json файла:

    [{"id":10001,"img":e1,"desc":"desc1"},
    {"id":10002,"img":e2,"desc":"desc2"},
    {"id":10003,"img":e3,"desc":"desc3"}]

Ответ 1

Попробуйте это

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

или

iv.setBackgroundResource(R.drawable.img);

Ответ 2

Теперь, когда getDrawable и setBackgroundDrawable оба являются depricated, вы должны установить drawable как Background, как это:

view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable)); 

и если вы настроите minSdk ниже 16, выполните проверку следующим образом:

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

Ответ 3

Здесь новый метод

recyclerView.setBackgroundResource(R.drawable.edit_text_button_shape);

не используйте это старый метод recyclerView.setBackgroundDrawable(this.getResources() getDrawable (edit_text_button_shape).);