Image is ListView laden

  • Antworten:4
Gelöschter Account
  • Forum-Beiträge: 136

22.05.2011, 01:08:23 via Website

Hallo zusammen,

das Thema wurde schon oft angesprochen, ich habe auch viele Anleitungen gefunden, nur leider hat nichts wirklich funktioniert. Also folgendes:

Ich parse mit meiner App ein xml File. passt alles super, sieht genauso aus, wie es soll. Nun steht in der XML mit dem attribut "image" der Pfade zum Image. Dieses Image würde ich nun gerne links oder rechts neben der jeweiligen TextView stehen haben. Das hat bei mir aber vorne und hinten nicht funktioniert. Entweder wurde nichts angezeigt oder ich bekam einen NullPointer, den ich auch finden konnte nur nicht beheben.

Unten stehend poste ich euch meinen Code. Könnt ihr mir weiter helfen? Habe keine Ahnung, wie ich das machen soll.

1package com.pxr.tutorial.xmltest;
2
3import java.io.IOException;
4import java.io.InputStream;
5import java.net.MalformedURLException;
6import java.net.URL;
7import java.util.ArrayList;
8import java.util.HashMap;
9
10import org.w3c.dom.Document;
11import org.w3c.dom.Element;
12import org.w3c.dom.NodeList;
13
14import android.app.AlertDialog;
15import android.app.ListActivity;
16import android.content.Context;
17import android.content.DialogInterface;
18import android.content.Intent;
19import android.graphics.drawable.Drawable;
20import android.net.Uri;
21import android.os.Bundle;
22import android.view.Menu;
23import android.view.MenuItem;
24import android.view.View;
25import android.widget.AdapterView;
26import android.widget.AdapterView.OnItemClickListener;
27import android.widget.ImageView;
28import android.widget.ListAdapter;
29import android.widget.ListView;
30import android.widget.SimpleAdapter;
31import android.widget.Toast;
32
33public class Main extends ListActivity {
34
35 static final private int BACK_ID = Menu.FIRST;
36 /** Called when the activity is first created. */
37 @Override
38
39 public void onCreate(Bundle savedInstanceState) {
40 super.onCreate(savedInstanceState);
41 setContentView(R.layout.listplaceholder);
42
43 ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
44
45
46 String xml = XMLfunctions.getXML();
47 Document doc = XMLfunctions.XMLfromString(xml);
48
49 int numResults = XMLfunctions.numResults(doc);
50
51 if((numResults <= 0)){
52 Toast.makeText(Main.this, "Kein Ergebniss!", Toast.LENGTH_LONG).show();
53 finish();
54 }
55
56 NodeList nodes = doc.getElementsByTagName("referenz");
57
58 for (int i = 0; i < nodes.getLength(); i++) {
59 HashMap<String, String> map = new HashMap<String, String>();
60
61 Element e = (Element)nodes.item(i);
62 map.put("projekt", XMLfunctions.getValue(e, "projekt"));
63 map.put("link", XMLfunctions.getValue(e, "link"));
64 map.put("kunde", "Kunde: " + XMLfunctions.getValue(e, "kunde"));
65 map.put("jahr", "Jahr: " + XMLfunctions.getValue(e, "jahr"));
66 map.put("technologie", "Technologie: " + XMLfunctions.getValue(e, "technologie"));
67 map.put("image", XMLfunctions.getValue(e, "image"));
68 mylist.add(map);
69 }
70
71 ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main,
72 new String[] { "kunde", "projekt", "image", "technologie", "link", "jahr" },
73 new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_image });
74
75 setListAdapter(adapter);
76
77 final ListView lv = getListView();
78 lv.setTextFilterEnabled(true);
79 lv.setOnItemClickListener(new OnItemClickListener() {
80 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
81 @SuppressWarnings("unchecked")
82 final HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
83
84
85 String title = o.get("kunde");
86 String message = o.get("projekt")+"\n"+o.get("jahr")+"\n"+o.get("technologie");
87
88 AlertDialog.Builder alt_bld = new AlertDialog.Builder(Main.this);
89 alt_bld.setTitle(title);
90 alt_bld.setMessage(message)
91 .setPositiveButton("Zur Homepage", new DialogInterface.OnClickListener() {
92 public void onClick(DialogInterface dialog, int id) {
93 String url = "http://www.ideenfrische.de/"+o.get("link");
94 Intent i = new Intent(Intent.ACTION_VIEW);
95 i.setData(Uri.parse(url));
96 startActivity(i);
97 }
98 })
99 .setNegativeButton("Zurück", new DialogInterface.OnClickListener() {
100 public void onClick(DialogInterface dialog, int id) {
101 dialog.cancel();
102 }
103 });
104 alt_bld.show();
105 }
106 });
107 }
108
109 @Override
110 public boolean onCreateOptionsMenu(Menu menu)
111 {
112 super.onCreateOptionsMenu(menu);
113 MenuItem item = menu.add(0, BACK_ID, 0, "Beenden");
114 return true;
115 }
116
117 @Override
118 public boolean onOptionsItemSelected(MenuItem item) {
119 switch (item.getItemId()) {
120 case BACK_ID:
121 finish();
122 return true;
123 }
124 return super.onOptionsItemSelected(item);
125 }
126}


Liebe Grüße,
Malte

Antworten
Gelöschter Account
  • Forum-Beiträge: 136

26.05.2011, 20:19:23 via App

Keiner eine Idee?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.05.2011, 21:55:15 via App

Hey,
versuch mal adapter.setViewBinder() mit einem Custom ViewBinder aufzurufen. Du kannst da auch einfach reinschreiben "new ViewBinder" und dann STRG+Leertaste und das mit "anonymous inner type" auswählen, dann kannst du den direkt bei dir im Code definieren.
Lg Ansgar

— geändert am 26.05.2011, 21:55:51

Antworten
Gelöschter Account
  • Forum-Beiträge: 136

26.05.2011, 22:21:04 via Website

Habs mal so gemacht:

1adapter.setViewBinder(new ViewBinder() {
2
3 public boolean setViewValue(View view, Object data,
4 String textRepresentation) {
5
6
7 }
8 });

Allerdings sagt er mir beim "setViewBinder"

1The method setViewBinder(new ViewBinder(){}) is undefined for the type ListAdapter

und beim ViewBinder, dass er dort eine Klasse haben will was ich auch verstehe. Allerdings, wenn ich eine Klase erstelle, bleibt der Fehler beim setViewBinder bestehen.

Und was soll ich dann machen? Also im ViewBinder?

Grüße,
Malte

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.05.2011, 22:56:19 via App

Hm,
vielleicht solltest du 'ListAdapter' in 'SimpleAdapter' ändern?
Lg Ansgar
P.S. In dem ViewBinder kannst du dich entweder selbst um die View kümmern (return true) oder dem SimpleAdapter sagen, er soll es doch selbst machen (return false)

Antworten