[ERLEDIGT] Android Studio Erste App-Programmierung

T

tr1b3

Neues Mitglied
0
Kann mir einer sagen wieso der Programmcode nicht funktioniert?

sobald ich linearLayoutEntry.addView(ListenSpeicher.get(i).GetButton()); in der MainAktivity.java auskommentiere funktioniert der Code wie er soll.

Der Github link: GitHub - limo84/Einkaufsliste

Quelltest: MainActivity.java:

Code:
package coffee.einkaufsliste;

import android.content.Context;
import android.graphics.Color;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.TextView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<ListElement> ListenSpeicher;
    LinearLayout linearLayoutUpperPart;

    [USER=3517]@override[/USER]
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListenSpeicher = new ArrayList<>(0);
        linearLayoutUpperPart = (LinearLayout) findViewById(R.id.itemListLayout);

        // Es muss den ListenSpeicher vorher geben

        //ListElement FirstEntry = new ListElement(3, "Bohnen");
        //ListElement SecondEntry = new ListElement(4, "Gurken");
        //ListElement ThirtEntry = new ListElement (7, "Bananen");

        //ListenSpeicher.add(FirstEntry);
        //ListenSpeicher.add(SecondEntry);
        //ListenSpeicher.add(ThirtEntry);

        //EingabeAnzeigen(null);
    }

    public void onClickBtn(View v) {

        EditText numberOfItem = (EditText) findViewById(R.id.editTextItemNumber);
        EditText nameOfItem = (EditText) findViewById(R.id.editText);

        if(!numberOfItem.getText().toString().isEmpty() && !nameOfItem.getText().toString().isEmpty()) {

            Button Remove = new Button(this);
            Remove.setTextSize(20);
            Remove.setText("R");

            ListElement neuesElement = new ListElement(Integer.parseInt(numberOfItem.getText().toString()), nameOfItem.getText().toString(), Remove);
            ListenSpeicher.add(neuesElement);

            // ListenSpeicher.indexOf(neuesElement);

        }

        EingabeAnzeigen(null);

    }

    public void EingabeAnzeigen(View v) {
        // ListenSpeicher.size() != 0

        linearLayoutUpperPart.removeAllViews();

        for (int i = 0; i<= (ListenSpeicher.size()-1); i++){

            LinearLayout linearLayoutEntry = new LinearLayout(this);

            TextView Zahl = new TextView(this);
            Zahl.setTextSize(30);
            Zahl.setText(String.valueOf(ListenSpeicher.get(i).GetAnzahl()));
            //Zahl.setText(String.valueOf(ListenSpeicher.size()));

            TextView Leerzeile = new TextView(this);
            Leerzeile.setTextSize(30);
            Leerzeile.setText(" ");

            TextView Artikel = new TextView(this);
            Artikel.setTextSize(30);
            Artikel.setText(ListenSpeicher.get(i).GetArtikel());

            linearLayoutEntry.addView(Zahl);
            linearLayoutEntry.addView(Leerzeile);
            linearLayoutEntry.addView(Artikel);
            linearLayoutEntry.addView(ListenSpeicher.get(i).GetButton());

            linearLayoutUpperPart.addView(linearLayoutEntry);

        }

    }
}

ListElement.java:

package coffee.einkaufsliste;


import android.widget.Button;

/**
* Created by Tribe on 01.08.2017.
* Klasse für die Einträge
*/

public class ListElement {
    private String Artikel;
    private int Anzahl;
    private Button Remove;

    public ListElement(int Anzahl, String Artikel, Button Remove){
        this.Anzahl = Anzahl;
        this.Artikel = Artikel;
        this.Remove = Remove;

    }

    public String GetArtikel() {
        return Artikel;
    }

    public void SetArtikel (String Artikel) { this.Artikel = Artikel;}

    public int GetAnzahl(){
        return Anzahl;
    }

    public void SetAnzahl (int Anzahl) { this.Anzahl = Anzahl; }

    public Button GetButton() { return Remove; }

    public void SetButton (Button Remove) { this.Remove = Remove; }
}

Ich danke für die Hilfe
 
Zuletzt bearbeitet von einem Moderator:
FATAL EXCEPTION: main
Process: coffee.einkaufsliste, PID: 8297
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:5265)
at android.view.View$PerformClick.run(View.java:21534)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5741)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5265)
at android.view.View$PerformClick.run(View.java:21534)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5741)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:4438)
at android.view.ViewGroup.addView(ViewGroup.java:4274)
at android.view.ViewGroup.addView(ViewGroup.java:4215)
at android.view.ViewGroup.addView(ViewGroup.java:4188)
at coffee.einkaufsliste.MainActivity.EingabeAnzeigen(MainActivity.java:92)
at coffee.einkaufsliste.MainActivity.onClickBtn(MainActivity.java:64)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5265)
at android.view.View$PerformClick.run(View.java:21534)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5741)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
08-02 17:29:14.013 8297-8305/coffee.einkaufsliste I/System: FinalizerDaemon: finalize objects = 4
08-02 17:29:14.045 8297-8339/coffee.einkaufsliste D/OpenGLRenderer: ~CanvasContext() 0x7fa821f800
08-02 17:29:14.047 8297-8339/coffee.einkaufsliste D/OpenGLRenderer: ~CanvasContext() 0x7fa8230800
 
und da haben wir ja schon den Übeltäter ...

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.


Du fügst deinen View zweimal hinzu
 
Zuletzt bearbeitet:
Ich habe
EingabeAnzeigen(null);
auskommentiert. Jetzt funktioniert der gesamte Code. Nur Aktualisiert sich die Anzeige nur noch beim Benutzen des Show Button.

Der Fehler war wohl der falsche Übergabeparameter null.

Aber wenn ich die View des OnClicks übergeben funktioniert es ebenfalls nicht.

Kann mir einer verständlich die Zusammenhänge erklären, was es sich mit den Views auf sich hat?
[doublepost=1501708993,1501707885][/doublepost]Und ohne das AddView mit dem Button funktionierte das immer.
 
Hallo tr,

Eine Instanz eines Views kann nur einmal in einen Container.

Bei deinem ButtonClick erstellst du aber jedesmal eine neue Instanz und möchtest Diese dem Container hinzufügen.
Das geht aber nicht.

Entweder musst du den vorherigen mit RemoveView entfernen , oder die eine übergeordnete Instanz basteln,
und darin die Daten austauschen.
 
Kannst du mir genau die Stelle zitieren an der das passiert?
Bei der onClickBtn doch nicht oder?
Bei der Anzeichen Methode?
Und welche views soll ich dann entfernen?
 
Hallo tr,

Kannst du mir genau die Stelle zitieren an der das passiert?

Das steht im Log :
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:4438)
at android.view.ViewGroup.addView(ViewGroup.java:4274)
at android.view.ViewGroup.addView(ViewGroup.java:4215)
at android.view.ViewGroup.addView(ViewGroup.java:4188)
at coffee.einkaufsliste.MainActivity.EingabeAnzeigen(MainActivity.java:92)
at coffee.einkaufsliste.MainActivity.onClickBtn(MainActivity.java:64)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback

Ähnliche Themen

D
Antworten
23
Aufrufe
2.312
Data2006
D
5
Antworten
0
Aufrufe
1.104
586920
5
SaniMatthias
Antworten
19
Aufrufe
858
swa00
swa00
Zurück
Oben Unten