Android Programmierung / Erstellen einer neuen Instanz

kaoZ

Top Contributor
Hallo ich teste grad ein wenig rum , nur bekomme ich es irgendwie nicht hin aus meiner Activity heraus eine neue Instanz einer unterklasse zu erstellen ,

Konkret möchte ich ein neues Layout aufrufen und in diesem mit EditTextfelder und TextViews arbeiten, wenn ich den kompletten Code in die Hauptklasse schreibe funktioniert alles , ich würde aber gerne da es sich der ordnung halber um viel Code handelt , alles in unterklassen durch vererbung aufteilen , funktioniert aber irgendwie nicht.

Eigentlich müsste ich ja dem Button im zweiten layout einen seperaten onClick listener aufrufen der mir dann eine Methode der unterklasse aufruft um z.b später eine rechnung durchzuführen , aber wie genau ich es realisiere weiß ich noch nicht .....jemand ein paar anregungen ?

Hier ein wenig Code ( die namen der Variablen etc. sind fiktiv), die imports bis auf die des Unterklassen pakets hab ich mir mal gespart. ^^
Java:
import sh.appdevelopment.klassen.*;

public class Testklasse implements OnClickListener
{
    private Button ButtonEins;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_eins);

        ButtonEins = (Button)findViewById(R.id.buttonEins);
        ButtonEins.setOnClickListener(this);
  
     }
     public void onClick(View v)
    {
         switch(v.getId())
        {
         case R.id.buttonEins:

         new Testunterklasse();         // Hier sollte die Unterklasse Instanziert werden , eigentlich...

         setContentView(R.layout.layout_zwei);
         break;
         }
     }
}
Jetzt die Frage, bei klick auf den Button sollte eingentlich eine Unreferenzierte Instanz der Unterklasse aufgerufen werden , in der mir theoretisch auch nur die onClick Methode des listeners wichtig ist, muss ich trotzdem Referenzieren oder reicht es auch so ???? weil irgendwie funktioniert es nicht , oder muss ich es über eine neue Activity händeln ?
Java:
public class Testunterklasse extends Test implements OnClickListener
{    
    Button ButtonZwei = (Button)findViewById(R.id.buttonZwei); // Instanzierung,Referenzierung,Wertzuweisung mal ohne setter 

    public void onClick(View v)
    {
         switch(v.getId())
        {
         case R.id.buttonZwei:

         versuch();     // die Methode sollte eigentlich in der aktuellen instanz der Unterklasse bei Klick aufgerufen werden , funktioniert aber nicht ?!
         
         break;
         }
    }
    public void versuch()
    {
       CharSequence text = this.getResources().getString(R.string.text);
       this.ButtonZwei.setText(text);

    }

}

ich frage mich , wenn ich die neue unterklasse instanziere, aber nicht referenziere, kann ich ja auch nicht auf die onClick methode dieser klasse zugreifen, wenn ich allerdings schon in der switch anweisung instantiere und versuche eine methode aufzurufen schmiert das app zur laufzeit ab.....warum ?

Java:
KalorienRechner k = new KalorienRechner(); // das geht zur laufzeit hoch ? warum ?
k.start();
 
Zuletzt bearbeitet:
selbst wenn ich folgendes Versuche :

Testklasse.java
Java:
........

public onClick(View v)
{
switch(v.getId())
{
case R.id.ButtonEins:

Testunterklasse u = new Testunterklasse();
u.starten();
break;
}
}
public void starten(){
// TODO
}

Wenn ich jetzt versuche in einer instanz der Unterklasse (u) auf eine von Unterklasse überschriebene Methode von starten der Superklasse zuzugreifen , schmiert das app trotzdem ab, und ich hab keine Ahnung warum , da ja die Unterklasse die Superklasse erweitert, und diesmal eine Referenz auf die neu Instanzierte Unterklasse existiert (u).

Testunterklasse.java
Java:
public class Testunterklasse extends Testklasse implements OnClickListener
{

Button ButtonZwei;

@Override
public void starten()
{
    ButtonZwei = (Button)findViewById(R.id.buttonzwei);
    ButtonZwei.setOnClickListener(this);
}

public void onClick(View view)
{
switch(view.getId())
{
 case R.id.buttonZwei:  
 ButtonZwei.setText("test"); //setText ist lediglich nen versuch ob funktion gegeben ist
break;
}
}
}

Wenn ich jetzt Unterklasse als seperate Klasse ansehe und diese die Superklasse nicht erweitert, kann ich leider findViewById nicht verwenden.
Java:
ButtonZwei = (Button)findViewById(R.id.buttonzwei);  // lässt sich nicht verwenden insofern die klasse seperat aufgerufen wird ohne vererbung / onCreate Methode

Keiner einen Tipp oder nen lösungsvorschlag parat ? ich bin soweit das ich nun weiss das die Superklasse nicht auf Methoden der Unterklasse zugreifen kann, aber die Unterklasse kann ja die Methoden der Superklasse Überschreiben, trotzdem schmiert die app beim versuch zu Instanzieren ab.

wäre super wenn jemand ne idee hätte 🙂
 
Zuletzt bearbeitet:
Ich habe es mittlerweile über Activitys anstelle von Polymorphie gelöst .

Java:
......

// in der switch Anweisung ...
...

switch(v.getId())
{
case R.id.buttonEins:
Intent i = new Intent(this, Testunterklasse.class);
startActivity(i);
break;
}

so funktioniert alles .:rtfm:
 

Zurück
Oben