Text aus einem Layout auslesen und in einem neuen Layout in die TextView einfügen

  • Hey Leute,
    wie schon im Titel beschrieben möchte ich in einem Layout einen Text eingeben, diesen auslesen und in einem anderen Layout in die TextView einfügen lassen.
    Das Problem ist nur, dass die App nach der Eingabe in den EditText und dem drücken des Button, der das nächste Layout öffnen soll und den Text aus dem EditText in die TextView einfügen soll, abstürtzt.


    Meine MainActivity.java:


    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;



    public class MainActivity extends AppCompatActivity {private EditText eingabe;


    private TextView ausgabe;


    public void methode (View view) {
    {
    setContentView(R.layout.textausgabe);
    }


    eingabe = (EditText)findViewById(R.id.eingabetextfeld);


    ausgabe = (TextView)findViewById(R.id.ausgabe);


    ausgabe.setText(eingabe.getText());


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


    }Die texteingabe.xml:<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <EditText
    android:id="@+id/eingabetextfeld"
    android:layout_width="match_parent"
    android:layout_height="60.0dp" />


    <Button
    android:text="weiter"
    android:layout_width="match_parent"
    android:layout_height="60.0dp"
    android:onClick="methode" />



    </LinearLayout>Die textausgabe.xml:<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
    android:id="@+id/ausgabe"
    android:layout_width="match_parent"
    android:layout_height="50.0dp" />


    </LinearLayout>Ich hoffe ihr könnt mir helfen. Ich bin noch sehr neu in der App Programmierung für android also wenn möglich gerne mit Textbeispielen :thumbup:

  • Hallo
    also als erstens werden die Views in der onCreate Metode mit findViewById Inizalisirt.
    Du machst das im Klassen Rumpdf.
    wenn du die findViewById Metode benutz mus auch das Layout geladen sein also dein setContentView vor der findViewById Metode.
    zweitens da ´mit zwei layouts arbeiten möchtest must du auch das findViewById für die ausgabe nach dem laden des zweiten layout machen. wenn du wieder zurück zum ersten Layout gest must du die Id für dein EditText wieder suchen.
    Denn zur Laufzeit ist ja immer nur ein Layout geladen und somit is die id nicht verfügbar .
    Prüfbar mit dem Debugger.
    Sinvoll wäre auch in soeinem fall mit einer if abfrage zuprüfen od er die id findet.

  • Zitat:
    setContentView vor der findViewById Metode


    das habe ich doch hier:


    {
    setContentView(R.layout.textausgabe);
    }



    eingabe = (EditText)findViewById(R.id.eingabetextfeld);



    ausgabe = (TextView)findViewById(R.id.ausgabe);


    oder nicht?

  • Bitte benutze für code auch das Code Symbol </> .
    Zitat von dir.


    was sollen die Klammern in zeile 7 und 9?
    wann wird deine Methode "methode" ab Zeile 6 aufgerufen?
    auch wenn du nach dem setContentView deine Methode "methode" aufruft ist zur laufzeit nur die Id R.id.ausgabe verfügbar.
    die zweite id ist nicht verfügbar und kann auch nicht gefundenwerden da wirst du einen Null Pointer bekommen.
    es ist immer nur ein Layout - Xml-Datei acktiv.


  • er öffnet zwar das nächste Layout aber den text den ich voher eingegeben habe, wird noch nicht angezeig. was kann ich da tun?


    Edit:
    habe es noch etwas angepasst, hat aber auch nicht geholfen


    public class MainActivity extends AppCompatActivity {



    private EditText eingabe;
    private TextView ausgabe;
    String text;




    @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.texteingabe);
    eingabe = (EditText)findViewById(R.id.eingabetextfeld);
    text = eingabe.getText().toString();
    }
    public void methode (View view) {
    setContentView(R.layout.textausgabe);



    ausgabe = (TextView)findViewById(R.id.ausgabe);
    ausgabe.setText(text);
    }
    }

  • verstehe nicht ganz was das eigentlich soll mit den layout Tausch in eine Activity macht man eigentlich nicht dazu giebt es Fragmants.


    Wie und wann ruft du denn dein zweites Layout auf? Wird denn da auch die Id gefunden ? ist den die Variable auch mit dem Text deiner eingabe gefüllt? hast du das geprüft? Den eingegebenen Text must speichern, den dein Edittext ist wenn du dein zweites Layout aufrufst nicht mehr verfügbar.

  • das zweite Layout soll nach der nameneingabe und dem klick auf en "weiter" Butten geöffnet werden. das tut es auch. Nur der Name, den ich im ersten layout eingegeben habe wird nicht angezeigt. oder habe ich den vielleicht falsch gespeichert? so dass die String mit dem nächsten Layout geleert wird?

  • das ist der alte code:


  • aber das mit dem text ins neue Layout kopieren geht ja erst mal auch mit zwei layouts. bin halt gerade wieder am anfang
    den rest muss ich halt wieder rannbauen. wollte das jetzt aber von anfang an komplett machen und nicht erst in der mite anfangen. hatte halt am anfang noch keine ahnung wie man überhaubt eine android app erstellt :saint:

  • Mal zu Info. Das was du da machst sind keine activitys das ist eine klasse in der du viele verschiedene Layouts laden tust. Das ist total unübersichtlich und Fehler trächtig. Eine activity ist immer eine separate Klasse. Überdenken noch mal dein Grund Konzept
    Wenn du verschiedene Layout in einer Klasse lädst must du auch das findviewbyid immer wieder neu nach einem Layout Tausch macher. Du bekommst damit füher oder später sehr große Probleme.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!