| |||||||
Das Thema "Bilder in einer LV und FindViewById Nullpointer" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 23.07.2011
Beiträge: 6
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
| ich versuche gerade eine ListView zu erstellen, welche ein Bild enthält. Welches Bild es ist wird in der Datenbank gespeichert. Die ListView ist im Main layout enthalten, doch ich habe noch eine Layout XML Datei die das Layout für jede einzelne Zeile der ListView enthält, diese wird logischerweise nicht mit setContentView eingebunden. Doch jetzt kommt das Problem. Ich bauche die 2 TextViews und das ImageView aus meiner List Item XML um diese Views mit einem ViewBinder zu füllen. Doch wenn ich mir die Views in der OnCreate mit findViewById holen will dann haben meine Variablen NULL. Wie kann man das lösen ? Hier mein Code dann sollte es verständlicher werden: Code: public class Main extends ListActivity {
private DbAdapter mDbHelper;
private TextView tvvor;
private TextView tvnach;
private ImageView imgr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ringer);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
mDbHelper = new DbAdapter(this);
mDbHelper.open();
tvvor = (TextView) findViewById(R.id.tvvor); //Diese 3 Variablen haben NULL
tvnach = (TextView) findViewById(R.id.tvnach);
imgr = (ImageView) findViewById(R.id.image);
Cursor cur = mDbHelper.fetchAll();
startManagingCursor(cur);
//Hier wird die LV gefüllt
String[] From = new String[] {DbAdapter.KEY_FIRSTNAME, DbAdapter.KEY_NAME, DbAdapter.KEY_IMAGE };
int[] To = new int[] {R.id.tvvor, R.id.tvnach, R.id.image};
ListAdapter scur = new SimpleCursorAdapter(this, R.layout.list_item, cur, From, To);;
((SimpleCursorAdapter) scur).setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cur, int columnIndex) {
int viewid = view.getId();
switch(viewid){
case R.id.tvvor:
tvvor.setText(cur.getString(cur.getColumnIndex(bAdapter.KEY_FIRSTNAME))); //Hier kommt dann eine Exception weil tvvor null ist.
break;
case R.id.tvnach:
tvnach.setText(cur.getString(cur.getColumnIndex(DbAdapter.KEY_NAME)));
break;
case R.id.image:
String img = cur.getString(cur.getColumnIndex(DbAdapter.KEY_IMAGE));
Uri u = Uri.parse(img);
imgr.setImageURI(u);
break;
}
return true;
}
});
lv.setAdapter(scur);
}
} Hier ist die list_items.xml Code: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image"
android:layout_width="76dp"
android:layout_height="72dp"
android:src="@drawable/unbenannt" />
<TextView
android:id="@+id/tvvor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="Angela"
android:textSize="16sp" android:textStyle="bold" android:textColor="@color/blue">
</TextView>
<TextView
android:id="@+id/tvnach"
android:layout_width="161dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="Merkel"
android:textSize="16sp"
android:textStyle="bold"
android:layout_marginLeft="-15dp"
android:textColor="@color/blue"/>
</LinearLayout> |
| | |
| | #2 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
hat deine listview die id android:id="@android:id/list"
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| | #3 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 23.07.2011
Beiträge: 6
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Also ich habe android:id="@+id/@android:list" drinstehen. Wenn ich aber deine Id verwende, dann funktioniert es auch nicht. Der Code an sich hat auch funktionert, bevor ich den ViewBinder reingemacht habe. Beim From String hatte ich dann das "DbAdapter.KEY_IMAGE" und beim To String das R.id.image weggelassen, das ohne ViewBinder und es hat funktioniert. Weis einer vielleicht einen Alternativweg wie ich das lösen könnte ? |
| | |
| | #4 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
android:id="@+id/@android:list" da solltest du eigentlich schon probleme haben, denn es muss android:id="@android:id/list" heißen vielleicht solltest du das problem mal genauer beschreiben ? du sagst "deine variablen haben null" welche meinst du damit ? zeig mal die logcat ausgaben. alternativlösung: schreib dir einen custom adapter
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| Folgender Benutzer bedankt sich bei swordi für diesen Beitrag: | Krasaf (06.11.2011) |
| | #5 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 23.07.2011
Beiträge: 6
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Diese Variablen hatten NULL: Code: tvvor = (TextView) findViewById(R.id.tvvor); //Diese 3 Variablen haben NULL tvnach = (TextView) findViewById(R.id.tvnach); imgr = (ImageView) findViewById(R.id.image); Ich hab einfach den Teil mit dem ViewBinder weggelassen und siehe da es geht. Jetzt brauche ich auch die Variablen nicht zu initialisieren. Ich weiß nicht warum, aber es klappt mit android:id="@+id/@android:list" bei mir. Ich hatte anfangs etwas Probleme die LV darzustellen und nur mit android:id="@+id/@android:list" hat es geklappt. Danke für deine Hilfe |
| | |
| | #6 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
vielleicht ist android da etwas fehlertollerant. siehe hier: ListActivity | Android Developers android:id="@id/android:list" ist korrekt ich kann dir schon sagen, warum deine member null sind. du machst ein setcontentview(ringer). das ist aber das hauptlayout der seite und jenes deiner listeneinträge. der viewbinder arbeitet aber mit dem list_item.xml und von da hast du keine view inflatet => null
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| Folgender Benutzer bedankt sich bei swordi für diesen Beitrag: | Krasaf (06.11.2011) |
| | #7 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 23.07.2011
Beiträge: 6
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Ja genau das ist das Problem, dass ich die list_item.xml nicht als ContentView habe. Weist du wie man das löst ? Du sagst ich habe die xml nicht inflatet, hilft da der layoutinflater ? Und ich habe es jetzt in android:id="@id/android:list" geändert und es funktionert ebenfalls. Danke für den Hinweis. |
| | |
| | #8 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
naja ich verwende diesen viewbinder eigentlich nicht, da custom adapter für mich wesentlich übersichtlicher sind aber ich würde mal sagen du bekommst in der setViewValue() eine View, diese ist ja bereits das, was du brauchst. du holst dir davon die id, und dann hast ein switch über diese id. von daher ist die view ja genau eine dieser textviews.
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| Folgender Benutzer bedankt sich bei swordi für diesen Beitrag: | Krasaf (06.11.2011) |
| | #9 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 23.07.2011
Beiträge: 6
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Habe grad ausprobiert, was du beschrieben hast und es funktionert. Danke ich habe schon 2 Tage ganz Google danach abgesucht. |
| | |
| | #10 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
frag einfach mich
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Auf die Bilder einer Webcam zugreifen? | myrinh | Foto und Multimedia | 11 | 10.06.2011 21:14 |
| findViewById() Problem | ripperle | Android App Entwicklung | 5 | 28.03.2011 16:38 |
| Kann keine Bilder innerhalb einer MMS sehen | Cirra | Foto und Multimedia | 0 | 23.02.2011 00:01 |
| Bilder in nur einer Auflösung | The_S | Android App Entwicklung | 0 | 16.02.2011 10:12 |
| Bilder via mms » ist es möglich, mehrere Bilder in einer mms zu versenden!? « | xxcel | HTC Magic Forum | 4 | 25.09.2009 19:02 |