Problem mit Aufbau eines Formulars

P

pyretta

Ambitioniertes Mitglied
1
Hallo,

ich möchte ein recht einfaches Formular erstellen.
2 RadioButtons, ein TextFeld und einen Absende-Button.

(Später soll der Absende-Button dann eine neue Seite aufrufen und dort ein Bild anzeigen, dass zu den Eingaben im Formular passt. Aber da ich erst mit Android anfange, wollte ich schrittweise vorgehen.)

Ich habe mich dann eben mal durch die Formular-Tutorials der Android Developers gearbeitet und folgende Activity zusammengebastelt:

Code:
package de.appname;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class AppName extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final RadioButton rb_frau = (RadioButton) findViewById(R.id.rb_frau);
        final RadioButton rb_mann = (RadioButton) findViewById(R.id.rb_mann);
        rb_frau.setChecked(true);
        rb_mann.setChecked(false);
          
        final Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Perform action on clicks
                Toast.makeText(AppName.this, "Beep Bop", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                
            }
        });
        
        final EditText tx_alter = (EditText) findViewById(R.id.tx_alter);
        tx_alter.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {
                  // Perform action on key press
                  Toast.makeText(AppName.this, tx_alter.getText(), Toast.LENGTH_SHORT).show();
                  return true;
                }
                return false;
            }
        });
    }
    private OnClickListener radio_listener = new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks
            RadioButton rb = (RadioButton) v;
            Toast.makeText(AppName.this, rb.getText(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            // TODO Auto-generated method stub
            
        }
    };
}
dazu folgende main.xml:

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
<RadioGroup android:id="@+id/geschlecht"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <RadioButton android:id="@+id/rb_frau"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Frau" />
        
    <RadioButton android:id="@+id/rb_mann"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mann" />
</RadioGroup>
    
    
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Alter"
    />
    
<EditText
    android:id="@+id/tx_alter"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    />
    
<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:text="Absenden"
    />


</LinearLayout>
Der einzige Fehler der mir angezeigt wird, bezieht sich auf folgenden Code-Teil:

Code:
        button.[B]setOnClickListener[/B](new OnClickListener() {
            public void onClick(View v) {
                // Perform action on clicks
                Toast.makeText(AppName.this, "Beep Bop", Toast.LENGTH_SHORT).show();
            }
Das gibt mir die Fehlerkonsole aus:
The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (new DialogInterface.OnClickListener(){}) AppName.java /AppName/src/de/appname line 27 Java Problem
Es schlägt mir zwar 6 Möglichkeiten vor, wie ich den Fehler beheben könnte, aber da kommt überall der gleiche Fehler :blink:.

Wenn ich die App im Emulator öffne gibt es eine Fehlermeldung in der mir mitgeteilt wird, dass der Prozess gestoppt werden musste.

Ich bin langsam echt verzweifelt.

Kann mir jemand weiterhelfen?

Vielen Dank schon mal im Voraus.

Liebe Grüße,

pyretta
 
Zuletzt bearbeitet:
tja du gibst einen view.onclicklistener mit, benötigst aber einen dialoginterface.onclicklistener.

versuch mal

button.setOnClickListener(new DialogInterface.OnClickListener() {
 
  • Danke
Reaktionen: pyretta
Hallo swordi,

Mensch du bist aber schnell!
Vielen Dank für deine Antwort.

Ich hab deinen Vorschlag mal ausprobiert, bringt aber leider den gleichen Fehler. :unsure:

Es unterkringelt immer "setOnClickListener" und schlägt vor das wie folgt abzuändern:

setKeyListener, setOnKeyListener, setOnEditorActionListener, setOnFocusChangeListener, setOnLongClickListener, setOnTouchListener

Alles führt zum gleichen Fehler und bietet im Grunde die gleichen Lösungsvorschläge an.

Hast du noch eine Idee?
 
also der fehler muss irgendwo anders liegen.

dein code sieht gut aus.
 
  • Danke
Reaktionen: pyretta
Hast du vielleicht vergessen den OnClickListener zu importieren(
import android.view.View.OnClickListener;)
Einfach mal strg shift o drücken.
 
Hallo Gingerbread,

danke für deine Antwort.

Leider funktioniert dein Vorschlag auch nicht. Wenn ich "import android.view.View.OnClickListener;" einfüge hab ich einen Fehler mehr, weil Eclipse der Meinung ist, dass das ein "unused import" ist und will das "removen". :unsure: Und wenn ich strg shift und O drücke, passiert leider gar nichts.

@swordi

Wenn das nicht an meinem Code liegt, an was kann es denn noch liegen? Ich benutze Eclipse 3.6 auf Windows XP und arbeite momentan mit dem 1.6 Android SDK. Muss ich denn noch was an der AndroidManifest.xml ändern? Das habe ich bis jetzt noch nicht versucht.

Ich glaube ich brauche ein gutes Buch für Android. So eines das nach Schwerpunkten gegliedert ist, so in etwa: Wie macht man Formulare, oder wie bindet man ein Bild ein, oder wie verweise ich auf eine andere Activity, oder wie stelle ich eine Datenbankverbindung her, usw.

Gibt es sowas? (am besten auf Deutsch :blushing:)

Momentan habe ich das Buch "Android - Grundlagen und Programmierung" das es auch kostenlos als PDF-Download gibt, das hilft mir da aber leider nicht so gaaaanz weiter. Es ist zwar ganz gut für den Einstieg, aber so als Nachschlagewerk neben dem PC direkt beim Programmieren, nützt es mir persönlich als Anfänger leider nicht so viel. Heute kam die Workshop-DVD von Video2Brain an "Android 2 - Applikationsentwicklung auf der Android Plattform", mal sehen ob ich damit weiterkomme.

Wäre aber trotzdem äußerst dankbar wenn ihr mir helfen könntet, wenigstens mal das Formular zum laufen zu bekommen.:smile:
 
ist klar wenn du view.onclicklistener importierst, dass das unused ist, wenn du dialoginterface.onclicklistener benötigst

ein gutes buch ist sicher mal eine gute idee. ohne dir nahe treten zu wollen vermute ich auch noch java schwächen. die solltest du beseitigen bevor du dich mit android beschäftigst
 
  • Danke
Reaktionen: pyretta
hmm... ja das ist durchaus möglich :blushing: . Von "Schwächen" würd ich aber nicht reden, das sind leider gravierende Wissensschluchten. Ich habe mich bisher leider nur mit HTML, CSS, PHP, bissel JavaScript und bissel ActionScript beschäftigt.

Ist denn das was in der Activity geschrieben wird, reiner Java-Code? Dann würde mich ja ein Java-Buch wirklich seeehr weiterbringen.
 
ja sicher ist das java code ;)

lern zuerst mal anständig java, dann geh über zu android. glaub das macht es sicher einfacher
 
  • Danke
Reaktionen: pyretta
Danke dir swordi :smile:

Was für ein Buch würdest du mir denn empfehlen? Ich hab folgende kostenlose Exemplare gefunden:

Galileo Computing :: Java ist auch eine Insel (8. Auflage)

und

Handbuch der Java-Programmierung von Guido Krüger; Thomas Stark als eBook bei PaperC kostenlos lesen.

und

Java 6 - Master Class von Karsten Samaschke als eBook bei PaperC kostenlos lesen.

Das mit der Insel scheint mir sehr theoretisch aufgebaut zu sein mit vielen Entstehungsdaten. Dauert ein bissel bis der erste Codeschnippsel zu sehen ist. (man merkt, ich bin da bissel ungeduldig :blushing: )

Die anderen scheinen eher praxisorientiert zu sein, was ich besser finde.

Reicht es denn sich mit Java 6 zu beschäftigen oder sollte es Java 7 sein für Android?
 
ich kann dir selbst nicht genau sagen, welches buch das beste ist.
java 6 reicht für den anfang sicher ;)
 
  • Danke
Reaktionen: pyretta
Hallo,

jetzt muss ich leider doch noch mal nerven :blushing: ...

Aaalso: Ich habe mich jetzt eingehend mit Java und Android beschäftigt. Das Formular habe ich jetzt auch richtig gut hinbekommen und auch den Wechsel von der einen Activity zur anderen durch Klick auf den Button.

Jetzt will ich aber ein Bild durch im Formular (Activity 1) gesetzte Parameter in der Activity 2 austauschen. Und genau hier hänge ich schon wieder fest. :mellow:

Ich hab gegooglet wie 'ne blöde, hier gesucht, in den Java-Büchern gesucht (da hab ich schon mal gar kein ImageView gefunden...), in dem Android-Buch gesucht, auf dem DVD-Video-Workshop gesucht - nix, gar nix!

Ich komm echt überhaupt nicht weiter.

Diesen Code habe ich bis jetzt zusammengefummelt:

Activity 1:

Code:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioButton;

public class IU_formular extends Activity {
    
    private RadioButton rb1;
    private RadioButton rb2;
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void wechsleActivity(final View view) {    
            Intent my_intent = new Intent(this, IU_ergebnis.class);
             
             rb1=(RadioButton)findViewById(R.id.rb_frau);
             rb2=(RadioButton)findViewById(R.id.rb_mann);
  
                 if(rb1.isChecked() == true){
                     final ImageView imgAustausch =
                            (ImageView) findViewById(R.id.bild_id);
                 }
                 if(rb2.isChecked() == true){
                     final ImageView imgAustausch =
                         (ImageView) findViewById(R.id.bild_id);
                 }
    
             startActivity(my_intent);
    }

}

Die main.xml für die Activity 1:

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="20dip"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:layout_marginBottom="20dip"
    />
    
<RadioGroup
    android:id="@+id/rb_geschlecht"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
        
    <RadioButton
    android:checked="false"
    android:id="@+id/rb_frau"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Frau"
    />
        
    <RadioButton
    android:checked="false"
    android:id="@+id/rb_mann"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Mann"
    />
</RadioGroup>

<TextView
        android:layout_marginTop="20dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Alter"
        />
        
<EditText
        android:layout_marginTop="10dip"
        android:id="@+id/ed_alter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
        
<Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sf_iu_ergebnis"
        android:text="Absenden"
        android:onClick="wechsleActivity"
        android:layout_marginTop="10dip"
        />

</LinearLayout>


Und hier die ergebnis.xml für die Activity 2:

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:padding="20dip"
  android:orientation="vertical"
  >
    
<TextView
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:text="Das ist die zweite Activity!"
    android:layout_marginBottom="20dip"
/>

<CheckBox android:id="@+id/ck_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Dies ist ein Test" 
        android:layout_marginBottom="20dip"
        />

<ImageView 
android:layout_height="wrap_content" 
android:id="@+id/bild_id" 
android:layout_width="fill_parent" 
android:src="@drawable/bild"
android:layout_marginBottom="20dip">
</ImageView>
        
<TextView
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:text="Bla Bla Bla"
/>

</LinearLayout>

Die zweite Activity ist im Grunde noch ganz nackt.

Am liebsten würde ich den RadioButtons eine Variable geben und diese dann an die Activity 2 übergeben, damit ich dort dann die If-Abfrage machen kann. Das Selbe dann auch für das Textfeld. Bei dem Bild müsste ich dann aber noch wissen wie es in der ImageView austauschen kann via ID.

Wie mach ich denn das?

Das Problem müssten doch bestimmt schon 1000 andere gehabt haben... Ich find nur leider keine dokumentierte Lösung dazu.

Könnt Ihr mir da helfen?

Wäre euch echt dankbar.

Vielen Dank.

Liebe Grüße,

pyretta
 
um Werte von einer Activity an die nächste zu übergeben, kannst du ein Bundle erstellen, die Werte abfüllen und das Bundle dann an den Intent hängen, etwa so:

Code:
Intent my_intent = new Intent(this, IU_ergebnis.class);

Bundle bundle = new Bundle();
bundle.putString(”param1″, “test”);

my_intent.putExtras(bundle);

In der neuen Activity kannst du das Bundle wieder holen und die Werte auslesen:

Code:
Bundle bundle = this.getIntent().getExtras();
String param1 = bundle.getString(”param1″);
 
  • Danke
Reaktionen: pyretta
Vielen Dank für deine Antwort Zoopa.

Also wenn ich das richtig verstanden habe kann ich den Views Werte geben und mittels des Bundles an eine andere Activity übergeben.

Dann könnte der neue Code ja eventuell so aussehen, oder?

Activity 1

Code:
....
...
..
public void wechsleActivity(final View view) {    
            Intent my_intent = new Intent(this, IU_ergebnis.class);
             
        Bundle bundle = new Bundle();

             rb1=(RadioButton)findViewById(R.id.rb_frau);
             rb2=(RadioButton)findViewById(R.id.rb_mann);
  
                 if(rb1.isChecked() == true){
                     bundle.putString(”param1", “test1”);
                 }
                 if(rb2.isChecked() == true){
                     bundle.putString(”param2", “test2”);
                 }

        my_intent.putExtras(bundle);
    
             startActivity(my_intent);
    }

.....
Dann in der zweiten Activity:

Code:
Bundle bundle = this.getIntent().getExtras();
String param1 = bundle.getString(”param1");
String param2 = bundle.getString(”param2");
Joah... ähm und dann? :blushing:

Wie krieg ich da nun die Bilder in die ImageView?

Also es müsste so in der Art sein: (das wäre es zumindest in JavaScript)

Code:
    if(geschlecht == 'mann') {
   
        if(alter >= 0 && alter <= 4) {
            document.images['bild_id'].src = 'Bildpfad';       
        }
        if(alter >= 5 && alter <= 8) {
            document.images['bild_id'].src = 'Bildpfad';
        }
}


       


else if(geschlecht == 'frau') {
   
        if(alter >= 0 && alter <= 4) {
            document.images['bild_id'].src = 'Bildpfad';
        }
        if(alter >= 5 && alter <= 8) {
            document.images['bild_id'].src = 'Bildpfad';
        }
    }

Durch was kann ich denn "document.images['bild_id'].src = 'Bildpfad';" ersetzen? Wahrscheinlich ja iiiirgendwie so ähnlich: "final ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);". Oder? Aber wie genau? Das da funktioniert nämlich nicht.
 
Zuletzt bearbeitet:
Hallo,

ich hab nochmal intensiv darüber nachgedacht, und bei den Android Developern gestöbert.

If-Abfrage in der zweiten Activity:

Code:
if (param1.isChecked() == true) {
  
        if (tx_alter >= 0 && tx_alter <= 4) {

            public void setImageDrawable (final View view) {
            ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
            imgAustausch.getDrawable(@drawable\bild_1)
            }
        }
}
Könnte es so ähnlich gehen?

Oder bin ich auf dem völlig falschen Weg?
 
Zuletzt bearbeitet:
Der Ansatz ist nicht schlecht, hat aber noch einige Fehler. Ich würds mal ungefähr so versuchen

Activity 1
Code:
...
public void wechsleActivity(final View view) {    
	Intent my_intent = new Intent(this, IU_ergebnis.class);
             
	Bundle bundle = new Bundle();

	rb1=(RadioButton)findViewById(R.id.rb_frau);
	rb2=(RadioButton)findViewById(R.id.rb_mann);
	 
	//Hier kann man sich die IF-Abfragen eigentlich sparen, da man einfach
	//den Status (checked oder nicht) übergeben will
	//deshalb kann man den Status direkt mit putBoolean ins Bundle speichern

	 bundle.putBoolean("rb1_status", rb1.isChecked());
	 bundle.putBoolean("rb2_status", rb2.isChecked());

	my_intent.putExtras(bundle);

	startActivity(my_intent);
    }
...

und in der Activity 2
Code:
...
Bundle bundle = this.getIntent().getExtras();
boolean rb1_status = bundle.getBoolean("rb1_status");
boolean rb2_status = bundle.getBoolean("rb2_status");

if (rb1_status == true) {
        if (tx_alter >= 0 && tx_alter <= 4) {
		ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
		imgAustausch.setImageResource(R.drawable.bild_1);
        }
}
...
 
  • Danke
Reaktionen: pyretta
Oh wow! Vielen Dank Zoopa!

Das sieht echt weit besser aus als mein gestammeltes Java-Dingens :blushing: aber ich lerne ja noch :D.

Ich werde das gleich morgen früh ausprobieren. Das mit dem Status und dem putBoolean ist ja echt eine feine Sache. Werd ich mir auf alle Fälle merken.

Vielen Dank jedenfalls.

Ich werde dann auch gleich berichten, ob es geklappt hat. :smile:
 
Also...

Ich habe das nun getestet. Im Prinzip funktioniert das echt gut.

Nur ich habs glaub ich kaputt gemacht :blushing: ...
Ich habe versucht den Wert des Textfelds "Alter" als String der zweiten Activity zu übergeben und den String anschließend wieder als Zahl umzuwandeln, damit ich damit rechnen kann. Irgendwie bin ich daran gescheitert (oh Wunder).

Ich habe in einem Java Buch folgenden Befehl gefunden:
"int a = Integer.parseInt (text)" - das klang für mich richtig gut.

Also habe ich folgendes in der zweiten Activity versucht:

Code:
        Bundle bundle = this.getIntent().getExtras();
        boolean rb1_status = bundle.getBoolean("rb1_status");
        boolean rb2_status = bundle.getBoolean("rb2_status");
        String alter_wert = bundle.getString("alter_wert");
        int a = Integer.parseInt("alter_wert");
        
        if (rb1_status == true) {
                if (a >= 0 && a <= 4) {
                ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
                imgAustausch.setImageResource(R.drawable.f_erwachsen);
                }
        }
        
        if (rb2_status == true) {
            if (a >= 0 && a <= 4) {
            ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
            imgAustausch.setImageResource(R.drawable.m_erwachsen);
            }
    }
Naja... das zerschiesst mir aber dann die ganze App...

Wenn ich den Teil mit den Zahlen komplett weglasse, dann geht alles wunderbar. Aber ich brauch doch auch das Alter :unsure: .

Ich hab den Befehl in Eclipse eingegeben und dann mal STRG + Leertaste gedrückt. Dann hat es mir eben vorgeschlagen, in die Klammer einfach den String einzutragen. Ich dachte wenn ich "alter_wert" eintrage, würde das reichen. Aber ich nehme an, daran wird das ganze kranken.

Also eigentlich sagt Eclipse: "int a = Integer.parseInt (String string);"

In der ersten Activity sieht der betreffende Code so aus:

Code:
private EditText txtalter; 

Bundle bundle = new Bundle();
        txtalter=(EditText) findViewById(R.id.ed_alter);        
        bundle.putString("alter_wert", txtalter.toString());
Eclipse zeigt mir aber im Code gar keine Fehler an. Das einzige ist eine Warnung in der zweiten Activity.

Und zwar hier: String alter_wert = bundle.getString("alter_wert");

Eclipse meint das wird nicht benutzt.


Könnt ihr damit etwas anfangen? :huh:


EDIT:
Also den "Warnhinweis" dass "alter_wert" nicht benutzt wird, habe ich nun beseitigt.
Ich habe einfach bei "int a = Integer.parseInt("alter_wert");" in den Klammern die "" weggelassen.

Das half mir allerdings bei meinem Problem auch nicht weiter.
 
Zuletzt bearbeitet:
ICH HAAAAAAABS!! :scared:


(hoff ich jedenfalls....)


Ich hab es direkt als Integer übergeben, nicht erst als String (ist ja eigentlich auch logischer). Jetzt zerfetzt es mir nicht mehr die App.

sieht dann wie folgt aus:

Activity 1

Code:
bundle.putInt("alter_wert", txtalter.getInputType());

Activity 2

Code:
Integer alter_wert = bundle.getInt("alter_wert");

if (rb1_status == true) {
                if (alter_wert >= 0 && alter_wert <= 4) {
                ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
                imgAustausch.setImageResource(R.drawable.f_erwachsen);
                }
 
Code:
int a = Integer.parseInt("alter_wert");
Wenn du das so aufrufst, ist "alter_wert" ein String mit dem Wert "alter_wert", du übergibst dem parsen einfach nur "alter_wert" und daraus kann er natürlich keine Zahl machen. ;)
Die Anführungszeichen müssen weg damit du auf deine Variable zugreifst.

Daher kam auch der Hinweis, dass alter_wert nicht benutzt wird!
 
  • Danke
Reaktionen: pyretta

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
160
swa00
swa00
S
Antworten
4
Aufrufe
990
Sempervivum
S
W
  • WuDiDong
Antworten
3
Aufrufe
765
jogimuc
J
Zurück
Oben Unten