removeView

  • Antworten:15
Fragensteller
  • Forum-Beiträge: 49

27.11.2013, 16:28:24 via Website

Hallo,

ich habe ein paar Images in meinen Framelayout nach folgendem Prinzip geladen:

1ImageView Image1 = new ImageView(this);
2 Image1.setImageResource(Images[1]);
3 Image1.setOnClickListener(this);
4 Image1.setId(R.id.ImageId1);
5 params.leftMargin = screenbreite/5;
6 params.topMargin = (screenhoehe/2);
7 params.gravity= Gravity.TOP + Gravity.LEFT;
8 layoutbereich.addView(Image1,params);

Jetzt sollen einzelne Images wieder gelöscht werden, dazu verwende ich:
1ImageView Image1 = (ImageView) layoutbereich.getChildAt(1);
2 layoutbereich.removeView(Image1);
Das funktioniert ersteinmal.
Jetzt möchte ich aber viele Images verwenden und ein paar bestimmte ab und an wieder rauslöschen.
Wie kann ich diese jetzt rausfiltern.

— geändert am 27.11.2013, 16:29:29

Antworten
impjor
  • Forum-Beiträge: 1.793

27.11.2013, 16:42:45 via App

Als erstes würde ich dir empfehlen, eh FrameLayout#removeViewAt(int) zu benutzen, da musst du nämlich nicht dieses unnötige Konstruckt mit getChild machen.
Bezüglich deiner Frage: Ich denke mal so, wie du es bisher auch gemacht hast, oder? Wo liegt dein konkretes Problem?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Fragensteller
  • Forum-Beiträge: 49

27.11.2013, 18:20:27 via Website

1layoutbereich.removeViewAt(Images[1]);

genau hier liegt das Problem. So könnte ich genau das Image entfernen das weg soll.
Aber: Die App stürzt ab.
Bisher funktioniert nur getChild oder removeAllViews.

Antworten
Michele
  • Forum-Beiträge: 1.525

27.11.2013, 19:08:26 via Website

Fragensteller
1layoutbereich.removeViewAt(Images[1]);

genau hier liegt das Problem. So könnte ich genau das Image entfernen das weg soll.
Aber: Die App stürzt ab.
Bisher funktioniert nur getChild oder removeAllViews.


Hallo.

Ja und was macht man, wenn die App abstürzt?
Genau..Die LogCat angucken und den Fehler finden.
Also bitte LogCat zeigen.


LG

Antworten
Fragensteller
  • Forum-Beiträge: 49

28.11.2013, 10:31:25 via Website

folgender Logeintrag:

E/AndroidRuntime(335): FATAL EXCEPTION: main
E/AndroidRuntime(335): java.lang.NullPointerException
E/AndroidRuntime(335): at android.view.ViewGroup.removeViewInternal(ViewGroup.java:2194)
E/AndroidRuntime(335): at android.view.ViewGroup.removeViewAt(ViewGroup.java:2167)
E/AndroidRuntime(335): at de.android.b.Programm.verteilen(Programm.java:136)
E/AndroidRuntime(335): at de.android.b.Programm.onClick(Programm.java:128)
E/AndroidRuntime(335): at android.view.View.performClick(View.java:2485)
E/AndroidRuntime(335): at android.view.View$PerformClick.run(View.java:9080)
E/AndroidRuntime(335): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(335): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(335): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(335): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(335): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(335): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(335): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(335): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(335): at dalvik.system.NativeStart.main(Native Method)

Antworten
SvenDD
  • Forum-Beiträge: 272

28.11.2013, 11:02:12 via Website

Fragensteller
1layoutbereich.removeViewAt(Images[1]);

genau hier liegt das Problem. So könnte ich genau das Image entfernen das weg soll.
Aber: Die App stürzt ab.
Bisher funktioniert nur getChild oder removeAllViews.

Ich tippe mal, dein Array Images ist auf der Stelle 1 leer. Wenn das das einzige Bild ist, dann musst du bei 0 anfangen zu zählen.

Antworten
Fragensteller
  • Forum-Beiträge: 49

28.11.2013, 11:51:58 via Website

Nein, es sind 4 Bilder da, also 0 bis 3 sind belegt.

Antworten
impjor
  • Forum-Beiträge: 1.793

28.11.2013, 14:11:18 via App

Hast du dir deinen Log mal eine Sekunde angesehen? Da springt einem doch direkt NullPointerException ins Auge! Dahinter sogar noch mehr: Programm.java:136.
Damit sollte sich der Fehler behen lassen.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Fragensteller
  • Forum-Beiträge: 49

28.11.2013, 16:59:53 via Website

Aber warum ist der Null?

SvenDD

Antworten
SvenDD
  • Forum-Beiträge: 272

28.11.2013, 17:54:28 via Website

Mit dem Debugger mal geschaut? Evtl. wird da irgendwas nicht initialisiert oder übergeben.

Was verbirgt sich hinter dieser Zeile?

Antworten
impjor
  • Forum-Beiträge: 1.793

28.11.2013, 18:31:14 via Website

Fragensteller
Aber warum ist der Null?
Gute Frage.... aber das musst DU doch wissen! Hast du dir Zeile 136 in deiner Datei Programm.java angesehen? Auf welche Variable wird dort zugegriffen? Wo wird diese initialisiert?
Fragen über Fragen....


LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Fragensteller
  • Forum-Beiträge: 49

28.11.2013, 20:53:11 via Website

In Zeile 136 steht:
1layoutbereich.removeViewAt(Images[1]);

Am Anfang der Klasse wird Images deklariert:
1int Images[] = new int [] {R.drawable.img1,R.drawable.img2, R.drawable.img3, R.drawable.img4,
2 R.drawable.img5, R.drawable.img6, R.drawable.img7};

Es gibt auch keine Probleme die einzelnen Images anzuzeigen (siehe 1.). Nur lassen die sich nicht einzeln entfernen, denn jetzt soll Images plötzlich leer sein.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.11.2013, 21:20:56 via App

Du kannst doch aus dem Layout keine Drawable entfernen.
Der Funktion removeView muss eine View und nicht eine Drawable zugeordnet werden.
Du brauchst noch eine Arraylist aus views mit dem gleichen index wie die Drawable.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
impjor
  • Forum-Beiträge: 1.793

28.11.2013, 21:32:07 via App

Dein Problem ist, dass die Methode removeViewAt nicht eine Id erwartet, sondern einfachdas n-te Element entfern. removeViewAt(0) entfern also einfach die erste View.
Wenn du es so machen willst, nutze doch removeView(findViewById(Images[xyz])); Dann wird die id zur View umgewnadelt und diese dann entfern.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2013, 06:48:32 via App

Aber trotzdem kannst du keine Drawable als view definieren
Man braucht dazu ein array aus views

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
impjor
  • Forum-Beiträge: 1.793

29.11.2013, 16:46:55 via App

@Pascal P.: Stimmt, man müsste ein Array aus den ImageViews machen, oder mit meiner Methode eben eins mit den jeweiligen id's...
Wobei das bei seiner dynamischen Art und Weise wohl nicht gehen wird.
Hatte aber zuerst überlesen, dass das keine id's sind.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten