1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Krasaf, 05.11.2011 #1
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    Hallo Leute,

    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. swordi, 05.11.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    hat deine listview die id
    android:id="@android:id/list"
     
  3. Krasaf, 06.11.2011 #3
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    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. swordi, 06.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    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
     
    Krasaf gefällt das.
  5. Krasaf, 06.11.2011 #5
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    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);
    Jetzt habe ich das Problem jedoch gelöst, wenn auch aus purem Zufall.
    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. swordi, 06.11.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    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
     
    Krasaf gefällt das.
  7. Krasaf, 06.11.2011 #7
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    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. swordi, 06.11.2011 #8
    swordi

    swordi Gewerbliches Mitglied

    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.
     
    Krasaf gefällt das.
  9. Krasaf, 06.11.2011 #9
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    Habe grad ausprobiert, was du beschrieben hast und es funktionert. Danke ich habe schon 2 Tage ganz Google danach abgesucht. :thumbup:
     
  10. swordi, 06.11.2011 #10
    swordi

    swordi Gewerbliches Mitglied

    frag einfach mich :D
     
  11. Krasaf, 06.11.2011 #11
    Krasaf

    Krasaf Threadstarter Neuer Benutzer

    Deinen Namen merk ich mir :D
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Bild in Pdf einfügen mit ITextG Libary Android App Entwicklung 24.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[ERLEDIGT] Bei Klick auf Imagebutton das Bild darin ändern Android App Entwicklung 12.08.2017
[RÜCKMELDUNG FEHLT] Text und Bilder in View einbinden Android App Entwicklung 26.03.2017
[OFFEN] Wie kann ich den Hintergrund abhängig vom Vordergrund Bild dynamisch veränderbar machen? Android App Entwicklung 24.03.2017
Clientseitige Speicherung der Bilder Android App Entwicklung 31.10.2016
Du betrachtest das Thema "Bilder in einer LV und FindViewById Nullpointer" im Forum "Android App Entwicklung",