2013-05-16 16 views
11

EDYCJA: Niestety, zdałem sobie sprawę z twojego komentarza, moje pytanie nie było wystarczająco jasne. Napiszę nowy. Przepraszam za to i dziękuję za twoje odpowiedziUstawić program do rysowania jako tło

Wypełniam listview z pliku Json. Dzięki mojemu listadapterowi mogę łatwo przypisać odpowiednie dane json do każdego wiersza mojej listy. Że działa dobrze dla tekstu, na przykład:

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

Z powyższego kodu, każdy wiersz będzie prawidłowo wypełniona przez dobrych danych JSON.

Jednak nie uda mi się zrobić tego samego dla obrazu. Próbowałem ustawić prawidłowy obraz z moich danych JSON za pomocą tego:

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

Chyba robię coś złego rodzaju moich parametrów: „setBackgroundDrawable” wymaga rozciągliwej parametr. "getDrawable" wymaga int. Ustawiłem typ mojego pola img na int, ale to nie działa.

Każdy pomysł, dlaczego?

Moja lista adapter:

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

moja klasa pozycja:

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

I próbka mojego pliku json:

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

Prawdopodobnie chcesz użyć setImageResources, które przyjmą int jako parametr i ustawi src twojego widoku obrazu. Nadal problem nie jest ustawiony na setBackgroundDrawable. Również twój kod nie może działać. ll nie zawiera ani widoku tekstowego, ani widoku obrazu. – Blackbelt

+0

Co oznacza e1? Gdzie jest obraz w twoich danych json? – Oam

+0

Czy możesz opublikować układ "zasobów"? – Blackbelt

Odpowiedz

39

Spróbuj

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

lub

iv.setBackgroundResource(R.drawable.img); 
+6

Pamiętaj, że działa to tylko w api 16+. – CorayThan

+4

powinien używać iv.setImageResource (R.drawable.img); – Brave

+0

@CorayThan Jak to osiągnąć w poprzednich wersjach API (<= 15)? – AnV

7

Teraz jak getDrawable i setBackgroundDrawable oba są depricated należy ustawić odkształcalne jako tła jak ten:

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

i jeśli targating minSdk poniżej 16 następnie wykonać test takiego :

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

Tutaj nowy Metho d

recyclerView.setBackgroundResource (R.drawable.edit_text_button_shape);

nie używaj tej starej metody recyclerView.setBackgroundDrawable (this.getResources(). GetDrawable (edit_text_button_shape));

Powiązane problemy