Android Problem mit ListView und OnItemClickListener..

android_domi

Mitglied
Hallo,

ich bin gerade dabei eine kleine App zu machen.

Ich habe eine Liste erstellt und habe darin 6 Einträge, wenn ich auf einen eintrag klicke soll sich mit "setContenView"
die nächste Seite öffnen und im Textfeld auf dieser seite ein kleiner Text stehen.

Mein Problem ist jetzt, dass ich wenn ich die App (in Eclipse) ausführe und auf einen Listeneintrag klicke das sich die App schließt. Ich habe mir schon mehrere Tutorials angesehen und gelesen aber leider keine antwort gefunden.. :rtfm:

Hier der Quellcode von der MainActivity.java:
Java:
        final ListView lview;
    	final TextView tview;
    	final String[] list_value = {"bsp","bsp2","bsp3","bsp4","bsp5","bsp6"};


                    lview = (ListView) findViewById(R.id.lv1 );
                    tview = (TextView) findViewById(R.id.auswahl_geb_text);
                    
                    ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(MainActivity.this,            android.R.layout.simple_list_item_1, list_value) ;
        			lview.setAdapter(array_adapter);
        			lview.setOnItemClickListener (new OnItemClickListener(){

						@Override
						public void onItemClick(AdapterView<?> parent,
								View view, int position, long id) {
							
							switch(lview.getPositionForView(view)){
							
								case 0:{
								     tview.setText("Es liegen folgende Aufträge für bsp vor: ");
								    setContentView(R.layout.auswahl_geb);
									 break;
								}
								 case 1:{
								    tview.setText("Es liegen folgende Aufträge für bsp2 vor: ");
									 setContentView(R.layout.auswahl_geb);
									 break;
								}
								 case 2:{
								     tview.setText("Es liegen folgende Aufträge für bsp3 vor: ");
 									setContentView(R.layout.auswahl_geb);
									 break;
								 }
								case 3:{
								    tview.setText("Es liegen folgende Aufträge für bsp4 vor: ");
									setContentView(R.layout.auswahl_geb);
									break;
								}
								case 4:{
								    tview.setText("Es liegen folgende Aufträge für bsp5 vor: ");
									setContentView(R.layout.auswahl_geb);
									break;
								}
								case 5:{
								    tview.setText("Es liegen folgende Aufträge für die bsp6 vor: ");
									setContentView(R.layout.auswahl_geb);
									break;
								}
																							
							}
        				
						}
					});

Hier der Code meiner angemeldet.xml:

Java:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/angemeldet_text_1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ListView
        android:id="@+id/lv1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>
    
</LinearLayout>

Und hier mein Code für die auswahl_geb.xml:

Java:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    
   <TextView
	android:id="@+id/auswahl_geb_text"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="@string/auswahl_geb_text_1"
	android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

Ich hoffe ihr versteht mein Prolem und das ihr mir helfen könnt 🙂
Danke schon mal im Vorraus
 
Ein paar Bemerkungen vorweg: Sosehr ich auch noch nicht mit Android Studio warm werde, empfehle ich dir dorthinzuwechseln. Es ist leider die offizielle Android-IDE. Und man kann die Keybindings auf "Eclipse"-Schema umstellen, so dass man sich nicht völlig fremd vorkommt.
Es sei denn, du verwendest schon den neuen Eclipse-Fork des ADT-Plugins (Andmore -> Ecllipse Projekt)... Dann vergiss es 🙂

Das zweite ist: Ich bin mir ziemlich sicher, dass der LogCat-View dir einen StackTrace gibt, wenn du die Anwendung auch von Eclipse aus startest. Dieser wäre interessant und hilfreich gewesen.

Als drittes aber vermute ich, dass es dein mehrfacher Call auf #setContentView ist. Was soll der bezwecken? Den Inhalt (die UI) der Activity auf der du bist neu laden? Für so etwas nutzt man Fragmente und tauscht so Teile auf der Activity aus (diese Teile können natürlich auch "full-screen" sein).

Bitte erkläre also noch einmal, was der #setContentView-Call bezwecken sollte.

Grüsse,
Daniel
 
Erstmal Danke für deine schnelle Rückmeldung.

Hier ist die LogCat meldung:



04-22 07:17:51.267: D/dalvikvm(617): GC_FOR_ALLOC freed 127K, 2% free 11027K/11207K, paused 35ms, total 37ms
04-22 07:17:51.277: I/dalvikvm-heap(617): Grow heap (frag case) to 12.155MB for 1422024-byte allocation
04-22 07:17:51.337: D/dalvikvm(617): GC_CONCURRENT freed 1K, 2% free 12415K/12615K, paused 27ms+3ms, total 66ms
04-22 07:17:51.656: D/gralloc_goldfish(617): Emulator without GPU emulation detected.
04-22 07:18:26.546: D/AndroidRuntime(617): Shutting down VM
04-22 07:18:26.546: W/dalvikvm(617): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
04-22 07:18:26.596: E/AndroidRuntime(617): FATAL EXCEPTION: main
04-22 07:18:26.596: E/AndroidRuntime(617): java.lang.NullPointerException
04-22 07:18:26.596: E/AndroidRuntime(617): at com.example.digitalecheckliste.MainActivity$1.onItemClick(MainActivity.java:122)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2859)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.widget.AbsListView$1.run(AbsListView.java:3533)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.os.Handler.handleCallback(Handler.java:615)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.os.Handler.dispatchMessage(Handler.java:92)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.os.Looper.loop(Looper.java:137)
04-22 07:18:26.596: E/AndroidRuntime(617): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-22 07:18:26.596: E/AndroidRuntime(617): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 07:18:26.596: E/AndroidRuntime(617): at java.lang.reflect.Method.invoke(Method.java:511)
04-22 07:18:26.596: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-22 07:18:26.596: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-22 07:18:26.596: E/AndroidRuntime(617): at dalvik.system.NativeStart.main(Native Method)


Mein #setContentView soll bezwecken, dass uch auf die nächste seite komme. Ich befinde mich auf der angemeldet.xml und möchte auf auswahl_geb.xml.
Es soll funktionieren wie eine Ordner Struktur mit unterordnern. Es sind 3 Seiten (Ich momnetan noch 2 aber es sollen 3 werden) und auf allen sind Listen und wenn man auf einen Listen Eintrag klickt soll man auf der entersprechenden Seite landen.
Also aus Seite 1 ist eine Liste wo man etwas aufwählen soll, dann kommt man auf eine Seite wo wieder ein Liste ist und man auwählen muss und das ganze nochmal.

Ich hoffe das ich mich verständlich ausgedrückt habe..

Viele Grüße
Dominic
 
Wenn du jedesmal die UI neusetzt, wirst du die Zurücktaste (ohne weitere Arbeit) nicht benutzen können. In so einem Fall arbeitet man mit mehreren activities.

Solltest du das nicht wollen kommt der Fehler wahrscheinlich daher, dass die UI nicht asynchron geupdated werden kann (und ich glaube der listener ist asynchron). Es muss im UI-thread laufen (runOnUIThread())
 
Wie kann ich das denn machen das die Zurücktasten ohne weiterenaufwand Funktionieren?
Ich habe noch nie mit mehreren Activities gearbeitet, kannst du mir das vlt. ein kurzes Bsp. sagen/zeigen?

Was ist eine UL?

Es Funktioniert jetzt soweit, dass ich auf die nächste Seite Komme.
Ich habe das setTExt() wegelassen und daran lag es, jetzt weiß ich jedoch nicht wie ich den Text auf die nächste seite bekomme.
Ich glaube es gibt sowas wie dynamische Strings nicht oder?
Kann ich das mit Preferences machen?
 
Ui heißt User Interface.

Benutzen kannst du sie schon, du wirst aber wenn du z.b in der dritten Liste bist
nicht in die zweite zurückkommen.
Ich denke, dass du dir wegen activities tutorials im Internet angucken solltest, das sind Grundlagen und es gibt genug.
 
Und noch ein Frage: Müsste ich dann nicht in meinem Fall bei 5 Listen einträgen, auch 5 Activities erstellen damit jeder Listen eintrag zu einer anderen Seite/Liste führt?
 
Eine activity kannst du dir wie ein Fenster vorstellen. Rufst du ein neues Fenster auf schiebt das alte sich in den Hintergrund. Activities sind das grundlegendenste in Android, aber wie gesagt, bei so vielen Anleitungen im internet findest du schon was informatives.
 
Hallo android_domi,

ich denke dieses Tutorial wird dir weiter helfen. Starting Another Activity | Android Developers
Du hast 2 Activities: 1ne mit deiner ListView und eine andere was dann den Inhalt anzeigt. Wenn du jetzt auf ein ListView Item klickst öffnest du einfach die 2. Activity und übergibst ihr mit intent.putExtra... die benötigten Daten (in deinem Fall Text).

Das ist nicht die eleganteste Lösung aber besser als nichts 🙂

Lg
 
BTW: Dein Fehler steht mitten in dem LogCat-Einträgen:

04-22 07:18:26.596: E/AndroidRuntime(617): java.lang.NullPointerException
04-22 07:18:26.596: E/AndroidRuntime(617): at com.example.digitalecheckliste.MainActivity$1.onItemClick(MainActivity.java:122)

In Zeile 122 deiner Klasse versuchst du, auf ein noch nicht initialisiertes Objekt (eine Null-Referenz) zuzugreifen. Ohne die genaue Stelle zu kennen, ist es schwierig zu sagen, was genau schief geht.

Wenn du keine Activities verwenden möchtest, kannst du auch Fragmente nutzen (inklusive Back-Button), dabei wird lediglich der Inhalt der Activity (wie @Ch4t4r schon bemerkte: das ist quasi ein Full-Screen-Fenster in Android) ausgetauscht. Ist IMHO etwas einfacher Daten über deren Grenzen auszutauschen, als bei Activities.

Fragments | Android Developers

Unter Android wirst du aber nicht drum herum kommen, dich sowohl mit Activities, als auch Fragmenten auseinanderzusetzen. Und auch mit einem ordentlichen und flexiblen Layout deiner UIs...
Einfach dran bleiben: Jeder hat da mal als Frischling begonnen!
 

Neue Themen


Zurück
Oben