Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

10.02.2015, 19:56

[Android] Kann meinen Button nicht klicken?

Hi,
um es gleich gesagt zu haben: Ich bin Android Anfänger. Wir haben in der Schule mit Android Programmierung angefangen und mein Lehrer weis auch nicht weiter...

Ich habe ein LinearLayout: TextView, Button, Button, TextView.

Die UI habe ich in einem Fragment gepackt, da ich was ausprobieren möchte ;)
Jedoch komme ich gar nicht erst dazu, denn ich kann meinen Button nicht klicken.

Per XML habe ich anfangs versucht meine Methode "onClick" aufzurufen, bis ich bemerkte:
-> Oops! NullPointerException! Er sucht in der Activity nach der Methode, statt im Fragment.

Deshalb habe ich dann das gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
         View view = inflater.inflate(R.layout.start_fragment, container, false);

        counter = (TextView) getView().findViewById(R.id.textView);

        Button register = (Button) getView().findViewById(R.id.button_register);
        register.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        i++;
                        counter.setText("Clicks counted:\t"+i);
                    }
                });


        return view;
    }


Jedoch zeigt das hier nichts an. Keine Fehler oder sonst was.
Falls ihr noch mehr Code braucht, dann sagt mir bitte Bescheid.

Gruß Techie

P.S.: Ich nutze Genymotion als Emulator, da ich mit den anderen einfach nicht klar komme.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

10.02.2015, 20:03

Zeig mal das layout.xml.

Setz mal ein Breakpoint in dem "onClick". Erreichst du das wirklich nicht?

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

10.02.2015, 20:14

Breakpoints, wieso habe ich nicht vorher daran gedacht...

Die Methode onCreateView() vom Fragment wird nie aufgerufen.
Ich bin davon ausgegangen, dass es aufgerufen wird, weil ja eigentlich alles gezeichnet wird.

Das ist seltsam, woher weis die App, welches XML es laden soll O.o

EDIT:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.palermo_game.palermo.start_Fragment"
    android:background="#ffffff"
    android:orientation="vertical">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/label_title"
        android:text="@string/label_app"
        android:layout_gravity="center_horizontal"
        android:textColor="#ff000000" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_register"
        android:id="@+id/button_register"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_login"
        android:id="@+id/button_login"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/counterView"
        android:layout_gravity="center_horizontal" />


</LinearLayout>
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

10.02.2015, 20:15

Sollte Zeile 9 nicht vielleicht eher so lauten?
Button register = (Button) view.findViewById(R.id.button_register);
Oder werden Zeile 9 und 10 bei Dir wirklich ohne NPE ausgeführt?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

5

10.02.2015, 20:18

Ja, so sollte es eigentlich sein. Insgesamt kam keine NPE raus und auch die Änderung am Code, wie du Vorgeschlagen hast, bewirkt keine Änderung :(

onCreateView vom Fragment wird garnicht erst aufgerufen :o
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

10.02.2015, 20:22

Wo tritt die von Dir im ersten Post beschriebene NPE auf?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

7

10.02.2015, 20:29

Der Tritt auf wenn ich die Method zum Aufrufen per XML setzte:

java.lang.IllegalStateException: Could not find a method onClick(View) in the activity class com.palermo_game.palermo.container_Activity for onClick handler on view class android.widget.Button with id 'button_register'
at android.view.View$1.onClick(View.java:3578)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: onClick [class android.view.View]
at java.lang.Class.getConstructorOrMethod(Class.java:460)
at java.lang.Class.getMethod(Class.java:915)
at android.view.View$1.onClick(View.java:3571)
            at android.view.View.performClick(View.java:4084)
            at android.view.View$PerformClick.run(View.java:16966)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)


Da ich aber ein Fragment verwende, muss ich den OnClickListener per Code setzen (oder nicht?).
Deßhalb lasse ich den Teil Blank und setzt den Handle nach dem oben geposteten Code.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

8

10.02.2015, 20:37

Ganz schön naiv, na? (Auf mich selbstbezogen).

C#-Quelltext

1
2
3
4
5
6
7
8
9
public class container_Activity extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.start_fragment);
    }
}


Ich glaube da stimmt etwas nischt :dash:
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

10.02.2015, 20:39

Das ist übrigens keine NPE ;)
Zeig mal bitte die Activity, die das Fragment einbindet. Bzw. das XML oder wie auch immer Du das Fragment erzeugst. Womöglich hast Du Deine eigene Klasse für das Fragment gar nicht angegeben?

Edit: Ninja. :ninja: Da weiß Android gar nicht, dass es das Fragment eine eigene Klasse hat. Ich füge Fragments üblicherweise über Transactions hinzu und erzeuge die Instanzen selbst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

10

10.02.2015, 20:43

Das da oben ist die MainActivity. Ich sehe jetzt schon meinen Fehler. Da oben wird einfach das LAYOUT vom Fragment geladen, aber die Klasse wird nicht genutzt.
Ich habe das Tutorial von der Android Developer Seite nicht wirklich erfasst.

Aber ich glaube es jetzt zum laufen zu bekommen.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige