2012-04-07 19 views
0

Ich erstelle eine ListView, die zwei TextViews und ein ImageView enthält.Android übergibt Bild an eine ListView, die ein ImageView enthält

Ich übergebe Daten an meine SimpleAdapter mit einer Hashmap, also konvertiere ich die IDs der Bilder in eine Zeichenfolge und später im SimpleAdapter konvertiere ich sie wieder in Ganzzahlen, um die Bildressource zu setzen.

Das scheint jedoch nicht zu funktionieren.

Der entsprechende Code ist:

Die oncreate meiner Tätigkeit

clubImages = new Integer[] { 
    R.drawable.pic1, R.drawable.pic2, 
    R.drawable.pic3, R.drawable.pic4, 
    R.drawable.pic5     
}; 

ListView lv = (ListView)findViewById(android.R.id.list); 

// create the grid item mapping 
String[] from = new String[] {"image"}; 
int[] to = new int[] {R.id.club_image}; 

// prepare the list of all records 
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
for(int i = 0; i < eventTitles.length; i++){ 
    HashMap<String, String> map = new HashMap<String, String>(); 

    map.put("image", getString(clubImages[i])); 
    fillMaps.add(map); 
} 

// fill in the grid_item layout 
SimpleAdapter adapter = new MySimpleAdapter(this, fillMaps, R.layout.eventview_row, from, to); 
lv.setAdapter(adapter); 

die simpleadapter Klasse

public class MySimpleAdapter extends SimpleAdapter { 

    private List<HashMap<String, String>> results; 

    public MySimpleAdapter(Context context, List<HashMap<String, String>> data, int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     this.results = data; 
    } 

    public View getView(int position, View view, ViewGroup parent){ 

     Typeface type = Typeface.createFromAsset(getAssets(), "fonts/aircruiser.ttf"); 
     View v = view; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.eventview_row, null); 
     } 

     mClubImageImageView = (ImageView) v.findViewById(R.id.club_image);   

     int ClubImageHelper = Integer.parseInt(results.get(position).get("image").toString()); 
     mClubImageImageView.setImageResource(ClubImageHelper); 

     return v; 
    } 
} 

Der Fehler in meinem logcat

E/AndroidRuntime(19406): java.lang.NumberFormatException: unable to parse 'res/drawable-hdpi/pic1.png' as integer 

Antwort

2

Sie können‘ t Übergeben Sie R.drawable.pic1 als String und analysieren Sie es dann als Integer. Das wird nicht funktionieren, anstatt einfach passiert die erste Integer ziehbar ids direkt im HashMap:

List<HashMap<String, Integer>> fillMaps = new ArrayList<HashMap<String, Integer>>(); 
    for(int i = 0; i < eventTitles.length; i++){ 
     HashMap<String, Integer> map = new HashMap<String, Integer>(); 

     map.put("image", clubImages[i]); 
     fillMaps.add(map); 
    } 

Ich hoffe, dass ich verstehe, was Sie wollen. Sie könnten eine Klasse, um die Daten zu halten, die Sie an den Adapter passieren in mögen, zum Beispiel:

class DataObject { 
    int imageId; 
    String firstString; 
    String secondString; // add here any string that you want to put in your list 

    public DataObject(String firstString, String secondString, int imageId) { 
     this.imageId = imageId; 
     this.firstString = firstString; 
     this.secondString = secondString; 
    } 
} 

dann die Liste für den Adapter konstruieren:

List<HashMap<String, DataObject>> fillMaps = new ArrayList<HashMap<String, DataObject>>(); 
    for(int i = 0; i < eventTitles.length; i++){ 
     HashMap<String, DataObject> map = new HashMap<String, DataObject>(); 

     map.put("image", new DataObject("First String", "second String", clubImages[i])); 
     fillMaps.add(map); 
    } 

Im abrufen getView() Methode des DataObject und verwenden Sie die Inhaltsdaten wie Sie möchten.

+0

helfen, das Problem ist, dass ich zu 2 Strings passieren, ich sie aus dem Code belassen, wie es irrelevant zu sein schien. Gibt es eine Möglichkeit, eine List > und eine List > an den SimpleAdapter zu übergeben? –

+0

@MatsRaemen Ich habe meine Antwort bearbeitet, ich hoffe, dass dies das ist, was Sie wollen. – Luksprog

+0

Das sieht genau so aus, was ich brauche, aber ich kann nicht herausfinden, wie man die Calues ​​aus dem DataObject in der getView() -Methode bekommt. Wenn ich zum Beispiel eine TextView mEventTitleTextView habe und den Text dieser TextView auf den Wert von "First String" setzen möchte, wie soll ich das machen? mEventTitleTextView.setText (results.get (position) .get ("First String")); war kein großer Erfolg –

0

here ist ein gutes Beispiel, das Sie können

enter image description here

Verwandte Themen