2016-06-15 5 views
0

Ich erstelle eine Android-App und alles scheint gut zu funktionieren. Das Problem beginnt, wenn ich versuche, einen Teil des Codes in eine andere Datei zu verschieben, um Dinge zu umgehen.Das Verschieben von Code in eine andere Klasse führt zum Absturz der App

Nehmen wir an, dass die App einen Spinner und eine Schaltfläche hat. Durch Drücken der Taste wird der aktuell ausgewählte String des Spinner ausgelesen und mit einem Toast angezeigt. So ist der Code:

Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas); 
String omada = spinnerOmadas.getSelectedItem().toString(); 

Toast.makeText(getApplicationContext(), omada,Toast.LENGTH_SHORT).show(); 

Wenn ich diesen Code halten in der onClick Funktion der Taste in der Haupttätigkeit, alles funktioniert. Ich möchte es in eine andere Datei verschieben, da ich mehr Code hinzufügen werde.

So erstelle ich eine Datei buttonCalculation.java mit dem folgenden Code:

package com.test.example; 

import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class buttonCalculation extends MainActivity { 

    public void calculate(){ 

     Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas); 
     String t1= spinnerOmadas.getSelectedItem().toString(); 

     Toast.makeText(getApplicationContext(), t1, Toast.LENGTH_SHORT).show(); 

    } 

} 

und in der onClick Methode der Haupttätigkeit ich dies tun:

buttonCalculation b1 = new buttonCalculation(); 
b1.calculate(); 

Es gibt keine Fehler Laut Android Studio in meiner Herangehensweise, aber wenn ich die App starte und den Knopf drücke, stürzt sie ab.

Gibt es etwas, das ich deklarieren muss, um die Objekte der Hauptaktivität zu finden?

+0

Verwendung Beispiel dafür. –

+0

Dies sollte nicht sein, wie Sie Dinge aufräumen. Wenn überhaupt, machen Sie es komplexer und schwerer zu warten. –

+0

Hey Mann. Ich habe mir die Mühe gemacht, Ihr Logbuch zu lesen und den Fehler in Ihre Frage einzufügen. Du hast das rückgängig gemacht? Was ist los mit Ihrer Weigerung, uns Ihren Fehler zu zeigen? –

Antwort

2

denke ich, das Problem mit der Funktion ist findViewById() wie Sie in Ihrer buttonCalculation Klasse definierte nicht jedes Layout. Daher musst du es als Parameter übergeben.

public class ButtonCalculation { //I don't find any reason to extend MainActivity here 

    //also you need a constructor (except if you are using a static method) 
    public void ButtonCalculation(){ 

    } 

    public void calculate(ViewGroup root, Context context){ 

     Spinner spinnerOmadas=(Spinner) root.findViewById(R.id.spinnerOmadas); 
     String t1= spinnerOmadas.getSelectedItem().toString(); 

     Toast.makeText(context, t1, Toast.LENGTH_SHORT).show(); 

    } 

} 

Und in Ihrem MainActivity

final ViewGroup root= (ViewGroup) ((ViewGroup) this 
      .findViewById(android.R.id.content)).getChildAt(0); 
ButtonCalculation b1 = new ButtonCalculation(); 
b1.calculate(root, getApplicationContext()); 
+0

Ich hatte nur MainActivity erweitert, da ich gehofft hatte, dass ich den Spinner und alles andere aus dem xml der Mainactivity einfacher lösen könnte. Versuchte Ihren Code, der einzige Fehler, den es mir gibt, ist auf "getApplicationContext()". Es kann es nicht lösen. – duk3r

+0

Small Edit, versuche es jetzt. – shantanu

+0

Tyvm, es funktioniert jetzt so wie ich es will! – duk3r

0

zuerst die Spinner-Taste als globale Variable in den MainActivity erklären:

protected Spinner spinner; 

dann in der onCreate() Methode des MainActivity es initialisieren.

spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas); 

und dann können Sie es in Ihrer buttonCalculation Klasse verwenden wie:

String t1= spinner.getSelectedItem().toString(); 
Verwandte Themen