Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Android Development, Java Einstieg

Diskussion: Android Development, Java Einstieg im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ich möchte mir dieses Thema gerne näher bringen. Das Problem ist/war das ich kein Java kann. Hatte zwar viel ...

Antwort
Alt 19.09.11, 12:48   #1 (permalink)
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard Android Development, Java Einstieg

Anzeige

Ich möchte mir dieses Thema gerne näher bringen. Das Problem ist/war das ich kein Java kann. Hatte zwar viel Erfahrung mit C und Python, aber um da nicht total ins kalte Wasser zu fallen, habe ich mir teilweise dieses Turoial Galileo Computing :: Java ist auch eine Insel –
durchgelesen, da ich das bei C schon sehr gut fande.

Mein Problem ist nun das ich mit diesem Codebeispiel trotzdem noch nicht so zurecht komme:

Code:
package net.learn2develop.HelloMobiForge;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
 
public class HelloMobiForge extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        //---the button is wired to an event handler---
        Button btn1 = (Button)findViewById(R.id.btnClickMe);
        btn1.setOnClickListener(btnListener);
    }
 
    //---create an anonymous class to act as a button click listener---
    private OnClickListener btnListener = new OnClickListener()
    {
        public void onClick(View v)
        {                        
            Toast.makeText(getBaseContext(), 
                    "Hello, readers of MobiForge!", 
                    Toast.LENGTH_LONG).show();
        }
    };    
}
Alles muss ich auch nicht wissen. Aber was ich nicht verstehe und gerne verstehen würde sind folgende Punkte:

Code:
(Button)findViewById(R.id.btnClickMe);
Was bedeutet es wenn Button in Klammer davor steht?
Was ist "R"? Es handelt sich wohl dabei um ein Objekt, welches die id's beinhaltet, aber warum heißt es "R"?



Code:
//---create an anonymous class to act as a button click listener---
    private OnClickListener btnListener = new OnClickListener()
    {
Was entsteht hier? Eine Klasse? Warum steht dann nicht "private class" oder nur "class" davor? Was passiert hier?
gugugs ist offline   Mit Zitat antworten
Alt 19.09.11, 13:26   #2 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

zu 1

Button ist eine Klasse ... da die besagte funktion nicht immer ein objekt der klasse Button zurück liefert, muss man dem compiler sagen: das was da raus kommt bitte als Button behandeln ... nennt man "casten" ....

zu 2

R ist eine klasse im namespace android

zu 3

OnClickListener ist ein Interface ... um es "mal eben" zu implementieren braucht man keine normale klasse ... eine anonyme klasse reicht ... (man will nur eine methode angeben die das besagte ereignis behandeln soll ... diese anonyme klasse hat keine weitere aufgabe)
__________________
Code:
:(){ :|:& };:
Veritas Aequitas

Geändert von GrafZahl (19.09.11 um 13:31 Uhr) Grund: typo
GrafZahl ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 19.09.11, 13:53   #3 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

Zu 1

Aber wenn ich genau weiß dass unter dieser ID ein Button liegt, könnte ich theoretisch das "(Button)" auch weg lassen, oder? Wenn ja, warum macht man das nicht?

edit: hm, ne kann ich irgendwie nicht. Aber warum?^^

Zu 3

Ich glaube ich verstehe das. Das heißt "btnListener" ist dann eine Reference die eine "OnClickListener" Methode beinhaltet?


Bei "btn1.setOnClickListener" ist doch "setOnClickListener" eine Methode in der Klasse "Button" oder? Wenn ja, müsste ich dann nicht in dieser Reference Button | Android Developers
diese Methode und auch andere finden?

Geändert von gugugs (19.09.11 um 13:59 Uhr)
gugugs ist offline   Mit Zitat antworten
Alt 19.09.11, 14:26   #4 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

In diesem Beispiel:

Code:
package test.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //Widgets
        Button ok_button = (Button)findViewById(R.id.my_button);
        EditText text1 = (EditText)findViewById(R.id.test1);
        EditText text2 = (EditText)findViewById(R.id.test2);
        
        ok_button.setOnClickListener(klick_listener);
        
    }
    
    private OnClickListener klick_listener = new OnClickListener() {
		
		public void onClick(View v) {
			//text1 Variable???
			
		}
	};
    
}
Komme ich hier überhaupt so einfach an die text1 Variable?
Oder muss ich diese mit
Code:
EditText text1 = (EditText)findViewById(R.id.test1);
Noch mal neu auslesen?
gugugs ist offline   Mit Zitat antworten
Alt 19.09.11, 14:29   #5 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 54
Standard

zu 1
Gerade weil du weißt daß es ein Button ist machst du das casting. Du willst ja im Anschluß auch die Methoden der Klasse Button benutzen. Mit der Methode findViewById könnte man genauso eine CheckBox finden.

zu 3
Nein, btnListener ist ein Objekt von
OnClickListener welches die Methode onClick implementiert hat.

Jein, die Klasse Button erweitert wiederum andere Klassen welche eine davon die Methode setOnClickListener implementiert hat.
odigo ist offline   Mit Zitat antworten
Alt 19.09.11, 14:36   #6 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 54
Standard

Zitat:
Zitat von gugugs Beitrag anzeigen
Komme ich hier überhaupt so einfach an die text1 Variable?
Oder muss ich diese mit
Code:
EditText text1 = (EditText)findViewById(R.id.test1);
Noch mal neu auslesen?
Natürlich musst das EditText-Objekt nochmal neu holen. Die Variable text1 ist in der Methode der anonymen Klasse nicht sichtbar. Das sind aber schon Java-Basics.
odigo ist offline   Mit Zitat antworten
Alt 25.09.11, 14:36   #7 (permalink)
 
Registriert seit: 05.05.07
Punky Duck Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von gugugs Beitrag anzeigen
Zu 1

Aber wenn ich genau weiß dass unter dieser ID ein Button liegt, könnte ich theoretisch das "(Button)" auch weg lassen, oder? Wenn ja, warum macht man das nicht?

edit: hm, ne kann ich irgendwie nicht. Aber warum?^^
Du weißt dass es ein Button ist, aber Java kann das nicht wissen. findViewById liefert ja wieder Name schon sagt ein View Objekt zurück. Das hat den Sinn dass du diese Methode auf alle Untertypen von View anwenden kannst und nicht nur speziell für Buttons. Hast du das View Objekt bekommen musst du es zu Button casten, damit du auch die Button Methoden verwenden kannst. Wenn du das nicht machst stehen dir nur die View Methoden zur Verfügung.

Zitat:
Komme ich hier überhaupt so einfach an die text1 Variable?
Oder muss ich diese mit

EditText text1 = (EditText)findViewById(R.id.test1);
Noch mal neu auslesen?
test1 kann die Activity gar nicht kennen. Woher denn auch? Du verwendest es im XML File, wenn die Activity darauf zugreifen soll musst du es erst mit findViewById "suchen".

Zitat:
Bei "btn1.setOnClickListener" ist doch "setOnClickListener" eine Methode in der Klasse "Button" oder? Wenn ja, müsste ich dann nicht in dieser Reference Button | Android Developers
diese Methode und auch andere finden?
Die Methode ist in View. Button erbt von View und deshalb hat auch Button diese Methode. Ausgeführt wird sie aber in View.
Punky Duck ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Android Development, Java Einstieg
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JAVA - Android (Eclipse), int to float MSeiz5 Code Kitchen 1 25.06.11 10:16
C++ Win32 Gui-Development sw33tlull4by Code Kitchen 5 04.11.10 23:50
GTK+ 2.0 development headers RemoteC Linux/UNIX 4 10.06.07 10:42
Java Einstieg.. wie geht das? [starfoxx] Code Kitchen 28 19.02.06 19:07
Java-Einstieg gTw34k3r Code Kitchen 25 06.01.06 19:45


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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61