ID eines FrameLayouts liefert null

  • Antworten:12
  • Bentwortet
Kai Breiling
  • Forum-Beiträge: 6

16.03.2014, 11:17:31 via Website

Hallo zusammen,

ich habe (glaube ich) ein recht simples Problem, komme aber leider nicht auf die Lösung bzw. weiß nicht wo ich nachschauen muss. In meiner App möchte ich gerne Nachrichten anzeigen lassen:

Wenn in der ersten Activity ein Button geklickt wird, soll sich ein neues Layout öffnen und dort mehrere TextViews in einem FrameLayout angereiht werden. Das Problem ist, dass ich in dem FrameLayout nichts hinzufügen kann, da l_nachrichtenbereich = (FrameLayout) findViewById(R.id.nachrichtenbereich) NULL liefert. Ich verstehe aber nicht warum:

Code-Ausschnitt
1[...]
2public class GameActivity extends Activity implements DialogInterface.OnClickListener{
3[...]
4 Dialog ladebildschirm;
5 Dialog nachrichtenschirm;
6 private FrameLayout l_nachrichtenbereich;
7[...]
8public void onButtonClick(View view) {
9 if (view.getId() == R.id.btn_refresh) {
10 nachrichten_anzeigen();
11 }
12[...]
13 public void nachrichten_anzeigen() {
14 nachrichtenschirm = new Dialog(this, android.R.style.Theme_Light);
15 nachrichtenschirm.setContentView(R.layout.nachrichten);
16 TextView nachricht_text = new TextView(getApplicationContext());
17 nachricht_text.setText("TEST");
18// Die nächste Zeile ergibt NULL
19 l_nachrichtenbereich = (FrameLayout) findViewById(R.id.nachrichtenbereich);
20// In der nächsten Zeile kommt die Exception
21 l_nachrichtenbereich.addView(nachricht_text);
22 nachrichtenschirm.show();
23 }

Das hier ist das Layout:
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="ich darf noch keine links posten"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:background="@color/black_overlay"
6 android:orientation="vertical" >
7
8 <TextView
9 android:id="@+id/textView1"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:text="Nachrichten"
13 android:textAppearance="?android:attr/textAppearanceLarge" />
14
15 <FrameLayout
16 android:id="@+id/nachrichtenbereich"
17 android:layout_width="match_parent"
18 android:layout_height="match_parent" >
19
20 </FrameLayout>
21
22</LinearLayout>

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

16.03.2014, 11:34:55 via Website

Das FrameLayout wird dann aus irgendwelchen gründen nicht gefinden, somt musst du mal LogCat posten und dann mal einen anderen namen Wählen.

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

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.03.2014, 12:43:20 via Website

Mach mal "Clean" auf deinem Workspace das er die R-Klasse neu generiert

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

16.03.2014, 16:02:18 via Website


nachrichtenschirm.setContentView(R.layout.nachrichten);
...
l_nachrichtenbereich = (FrameLayout) findViewById(R.id.nachrichtenbereich);

Wo wird hier das FrameLayout gesucht?
Und wo ist es tatsächlich?

Antworten
Kai Breiling
  • Forum-Beiträge: 6

16.03.2014, 22:09:43 via Website

Also Eclipse zeigt da keine Fehler an während der Eingabe.
Ist die Reihenfolge vielleicht falsch?

R:
1public static final class id {
2 public static final int TextView01=0x7f09000d;
3 public static final int TextView02=0x7f090010;
4 public static final int TextView03=0x7f09000f;
5 public static final int TextView04=0x7f090011;
6 public static final int TextView05=0x7f090003;
7 public static final int action_settings=0x7f09001f;
8 public static final int btn_attack=0x7f090002;
9 public static final int btn_heimsuchen=0x7f090008;
10 public static final int btn_refresh=0x7f09000a;
11 public static final int btn_regenerate=0x7f090006;
12 public static final int btn_thron=0x7f090015;
13 public static final int btn_treasure=0x7f090004;
14 public static final int button1=0x7f09001b;
15 public static final int button3=0x7f09001c;
16 public static final int dbg_akpt=0x7f09000b;
17 public static final int lay_aktionspunkte=0x7f09000e;
18 public static final int lay_demonname=0x7f090000;
19 public static final int lay_gold=0x7f090014;
20 public static final int lay_lebenspunkte=0x7f090017;
21 public static final int lay_macht=0x7f09000c;
22 public static final int lay_machtpunkte=0x7f090012;
23 public static final int lay_seelen=0x7f090013;
24 public static final int nachrichtenbereich=0x7f09001e;
25 public static final int progressBar1=0x7f090018;
26 public static final int textView1=0x7f09001d;
27 public static final int textView2=0x7f090001;
28 public static final int txt_heimsuchen=0x7f090009;
29 public static final int txt_passwort=0x7f09001a;
30 public static final int txt_regenerate=0x7f090005;
31 public static final int txt_thron=0x7f090016;
32 public static final int txt_treasure=0x7f090007;
33 public static final int txt_username=0x7f090019;
34 }
35 public static final class layout {
36 public static final int activity_game=0x7f030000;
37 public static final int activity_main=0x7f030001;
38 public static final int lade_screen=0x7f030002;
39 public static final int login_screen=0x7f030003;
40 public static final int nachrichten=0x7f030004;
41 }

Und Logcat sagt folgendes:
103-16 22:07:31.542: W/dalvikvm(7361): threadid=1: thread exiting with uncaught exception (group=0x40c6c1f8)
203-16 22:07:31.547: E/AndroidRuntime(7361): FATAL EXCEPTION: main
303-16 22:07:31.547: E/AndroidRuntime(7361): java.lang.IllegalStateException: Could not execute method of the activity
403-16 22:07:31.547: E/AndroidRuntime(7361): at android.view.View$1.onClick(View.java:3100)
503-16 22:07:31.547: E/AndroidRuntime(7361): at android.view.View.performClick(View.java:3627)
603-16 22:07:31.547: E/AndroidRuntime(7361): at android.view.View$PerformClick.run(View.java:14329)
703-16 22:07:31.547: E/AndroidRuntime(7361): at android.os.Handler.handleCallback(Handler.java:605)
803-16 22:07:31.547: E/AndroidRuntime(7361): at android.os.Handler.dispatchMessage(Handler.java:92)
903-16 22:07:31.547: E/AndroidRuntime(7361): at android.os.Looper.loop(Looper.java:137)
1003-16 22:07:31.547: E/AndroidRuntime(7361): at android.app.ActivityThread.main(ActivityThread.java:4511)
1103-16 22:07:31.547: E/AndroidRuntime(7361): at java.lang.reflect.Method.invokeNative(Native Method)
1203-16 22:07:31.547: E/AndroidRuntime(7361): at java.lang.reflect.Method.invoke(Method.java:511)
1303-16 22:07:31.547: E/AndroidRuntime(7361): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
1403-16 22:07:31.547: E/AndroidRuntime(7361): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
1503-16 22:07:31.547: E/AndroidRuntime(7361): at dalvik.system.NativeStart.main(Native Method)
1603-16 22:07:31.547: E/AndroidRuntime(7361): Caused by: java.lang.reflect.InvocationTargetException
1703-16 22:07:31.547: E/AndroidRuntime(7361): at java.lang.reflect.Method.invokeNative(Native Method)
1803-16 22:07:31.547: E/AndroidRuntime(7361): at java.lang.reflect.Method.invoke(Method.java:511)
1903-16 22:07:31.547: E/AndroidRuntime(7361): at android.view.View$1.onClick(View.java:3095)
2003-16 22:07:31.547: E/AndroidRuntime(7361): ... 11 more
2103-16 22:07:31.547: E/AndroidRuntime(7361): Caused by: java.lang.NullPointerException
2203-16 22:07:31.547: E/AndroidRuntime(7361): at de.aysalia.daemonenvonaysalia.GameActivity.nachrichten_anzeigen(GameActivity.java:145)
2303-16 22:07:31.547: E/AndroidRuntime(7361): at de.aysalia.daemonenvonaysalia.GameActivity.onButtonClick(GameActivity.java:153)
2403-16 22:07:31.547: E/AndroidRuntime(7361): ... 14 more

Antworten
Kai Breiling
  • Forum-Beiträge: 6

16.03.2014, 22:10:09 via Website

Habe auch "Clean" durchgeführt. Es hat sich jedoch nichts geändert.

Antworten
Kai Breiling
  • Forum-Beiträge: 6

17.03.2014, 11:41:39 via Website

Also das Layout selbst heißt Nachrichten ("nachrichten.xml").
Das FrameLayout heißt "nachrichtenbereich".

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

17.03.2014, 18:33:37 via Website

...und nochmal:


nachrichtenschirm.setContentView(R.layout.nachrichten);
...
l_nachrichtenbereich = (FrameLayout) findViewById(R.id.nachrichtenbereich);

Wo wird hier das FrameLayout gesucht?
Und wo ist es tatsächlich?

Antworten
Kai Breiling
  • Forum-Beiträge: 6

17.03.2014, 19:02:18 via Website


Wo wird hier das FrameLayout gesucht?
Und wo ist es tatsächlich?

Sorry, ich verstehe nicht was du meinst. Das FrameLayout befindet sich im Layout "nachrichten" und die ID wird in R.id gesucht. Da steht das FrameLayout auch drin.
Oder meinst du, ich muss die Suche noch auf "nachrichtenschirm" beziehen, da sich nachrichtenbereich nicht im selben Layout befindet, von wo aus ich meine Funktion starte? Aber wie würde ich das machen?

Antworten
Kai Breiling
  • Forum-Beiträge: 6

17.03.2014, 19:05:10 via Website

Jau tatsächlich! Das war ja wirklich einfach.

Ich habe nun "nachrichtenschirm." vor "findViewById" geschrieben.

Vielen Dank!

Antworten
impjor
  • Forum-Beiträge: 1.793

17.03.2014, 22:05:21 via App

findViewById bezieht sich auf das Layout, welches du mit setContentView gesetzt hast.
Da sich dein Layout aber in einer View befindet und nicht mit setContentView gesetzt wurde musst du die Methode findViewById der View aufrufen, die das Layout enthält.

Wenn alles soweit geklärt ist setzte den Thread doch auf beantwortet :D

Liebe Grüße impjor.

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

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

17.03.2014, 22:33:54 via Website

Sorry, ich verstehe nicht was du meinst.

Du hättest gerne gestern schon fragen dürfen, dann wäre ich ausführlicher geworden ;)


Vielen Dank!

Gerne :)

Antworten