Aufteilen in mehrere Sourcen

  • 12 Antworten
  • Letztes Antwortdatum
H

Hermi

Neues Mitglied
0
Hallo zusammen,

mein Projekt ist inzwischen doch recht umfangreich geworden. Es hat doch jetzt schon einige Tab.
Jedoch ist die ganze Funktionalität noch in der Main-class untergebracht.
Jetzt wollte ich zwecks Übersichtlichkeit, die Funktion der einzelnen Tabs in eigene Sourcen packen.

bisher z.B.
Code:
public void HeuteCreate () {
    BarHeuteFertig = (ProgressBar) findViewById(R.id.BarHeuteFertig);
    BarHeuteFertig.setMax(MaxFertig);
    BarHeuteFertig.setProgress(0);
}

Nun aufgeteilt in unterschiedliche Klassen in eigenen Sourcefiles
Code:
public class Heute extends Activity {
    Heute(Context context) {
     super();
 }
    public void Create () {
     BarHeuteFertig = (ProgressBar) findViewById(R.id.BarHeuteBarHeuteFertig );
     BarHeuteFertig .setMax(MaxBarHeuteFertig );
     BarHeuteFertig .setProgress(0);
    }
}

Wenn ich nun heute.Create(); aufrufe kommt im LogCat:
Code:
09-07 06:50:53.534: W/dalvikvm(1258): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-07 06:50:53.545: E/AndroidRuntime(1258): FATAL EXCEPTION: main
09-07 06:50:53.545: E/AndroidRuntime(1258): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.auvidel.process/de.auvidel.process.processActivity}: java.lang.NullPointerException
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.os.Looper.loop(Looper.java:123)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread.main(ActivityThread.java:3683)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at java.lang.reflect.Method.invokeNative(Native Method)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at java.lang.reflect.Method.invoke(Method.java:507)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at dalvik.system.NativeStart.main(Native Method)
09-07 06:50:53.545: E/AndroidRuntime(1258): Caused by: java.lang.NullPointerException
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.Activity.findViewById(Activity.java:1647)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at de.auvidel.process.Heute.Create(Heute.java:29)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at de.auvidel.process.processActivity.onCreate(processActivity.java:76)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-07 06:50:53.545: E/AndroidRuntime(1258):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-07 06:50:53.545: E/AndroidRuntime(1258):  ... 11 more

Bisher ha ich keine Idee dazu :sad:
 
setcontentview sehe ich keines

=> findviewbyid kann auch nichts finden => null
 
  • Danke
Reaktionen: Hermi
Muss dort dann R.layout.main, wo die Tabs definiert sind stehen oder auf R.layout.heute?

Dann schmiert er ja schon bei findViewById ab!?
 
dir fehlen grundlagen.

d.android.com

denke, da bist du sicher gut aufgehoben
 
Ich weiss, dass ich noch viiiillleee Lücken hab. So groß, dass ich hier garnicht weiß wo ich in der Reference anfangen soll.:confused2:

Weitere Hilfe wär schon schön:unsure:
 
ich habs ja schon geschrieben.

du musst vor dem findViewByID(R.id.meine_id) ein setContentView(R.layout.mein_layout) machen.

sonst wird findViewByID nichts finden können.
 
Ich raffs momentan trotzdem nicht :blink::blink:
Obwohl ich mir gefühlte 100 Seiten auf d.android durchgelesen hab.

So siehts momentan aus:
Code:
public void Create () {
    setContentView(R.layout.main);
    BarHeuteFertig = (ProgressBar) findViewById(R.id.BarHeuteBarHeuteFertig );
    BarHeuteFertig .setMax(MaxBarHeuteFertig );
    BarHeuteFertig .setProgress(0);
 }
Auch wenn ich alles auskommentier, bis auf setContentView(R.layout.main); kommt die Exception.

Kann es an meinem Aufbau des Mains mit Tabs über LayoutInflater liegen?
Code:
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TabHost tabHost = getTabHost();
        LayoutInflater.from(this).inflate(R.layout.tabs, tabHost.getTabContentView(), true);

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator(getResources().getString(R.string.TabTitel1), getResources().getDrawable(R.drawable.heute))
                .setContent(R.id.main));
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator(getResources().getString(R.string.TabTitel2), getResources().getDrawable(R.drawable.anlegen))
                .setContent(R.id.anlegen));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator(getResources().getString(R.string.TabTitel3), getResources().getDrawable(R.drawable.status))
                .setContent(R.id.status));
        tabHost.addTab(tabHost.newTabSpec("tab4")
                .setIndicator(getResources().getString(R.string.TabTitel4), getResources().getDrawable(R.drawable.rueckmelden))
                .setContent(R.id.rueckmelden));
        tabHost.addTab(tabHost.newTabSpec("tab5")
                .setIndicator(getResources().getString(R.string.TabTitel5), getResources().getDrawable(R.drawable.wiegen))
                .setContent(R.id.wiegen));
        tabHost.addTab(tabHost.newTabSpec("tab6")
                .setIndicator(getResources().getString(R.string.TabTitel6), getResources().getDrawable(R.drawable.auswertung))
                .setContent(R.id.auswertung));
        
        heute = new Heute( this );

        heute.Create();
:huh::huh:
 
Ich komm einfach nicht weiter. Hat nicht noch jemand einen Tipp? :crying::crying:
 
Hab jetzt die Lösung gefunden:

Code:
public void Create ( TabHost tabHost ) {
        BarHeuteFertig = (ProgressBar) tabHost.findViewById(R.id.BarHeuteBarHeuteFertig );
        BarHeuteFertig .setMax(MaxBarHeuteFertig );
        BarHeuteFertig .setProgress(0);
 }
 
Muss den Thread nochmal anheizen...

Hab jetzt ein eher grundsätzliches Java Problem.

Ich hab meine Methoden nun auf verschiedene Klassen verteilt. Jetzt möchte ich aus der einen Klasse eine Methode der anderen Klasse nutzen.
Wenn ich die jeweiligen Methoden als static definiere, erstmal kein Problem.

Promematisch wird's, wenn ich in einer als static definierten Methode eine Systemmethode wie z.B.
Code:
findViewById
nutzen möchte.
Da kommt dann immer:
Code:
Cannot make a static reference to the non-static method findViewById(int) from 
the type Activity

Wie macht Ihr das?


 
Hermi schrieb:
Wie macht Ihr das?


Ich mach das mit startActivity() oder startActivityforResult() wenn ich eine Klasse benutzen will die von Activity erbt. Auch benutze ich eine überladenen onCreate() Funktion und nicht dings.Create(). Der ganze Code zeigt eigentlich dass du dich noch nicht in das Basiswissen eingearbeitet hast und wild irgendwelche Codeschnipsel zusammenklebst. Lies dir die Tutorials auf developer.android.com durch und den Activity lifecycle als einstieg mal durch.
Dass wird dir mehr helfen als weiter Codeschnipsel zu kleben.
 
strider schrieb:
Ich mach das mit startActivity() oder startActivityforResult() wenn ich eine Klasse benutzen will die von Activity erbt. Auch benutze ich eine überladenen onCreate() Funktion und nicht dings.Create(). Der ganze Code zeigt eigentlich dass du dich noch nicht in das Basiswissen eingearbeitet hast und wild irgendwelche Codeschnipsel zusammenklebst. Lies dir die Tutorials auf developer.android.com durch und den Activity lifecycle als einstieg mal durch.
Dass wird dir mehr helfen als weiter Codeschnipsel zu kleben.

Irgendwie falsch verstanden:
Ich hab nicht das Problem, dass ich die Funktion nicht gestartet bekomme.

Das Problem ist mehr:
Ich hab für jeden Tab-Inhalt eine eigene Klasse. (heute.Create ist schon seit einigen Revisions durch onCreate ersetzt). Alle Methoden, die mit dieser Ansicht zu tun haben sind hier drin. Wenn jetzt ein Button auf Tab1 einige Buttons auf Tab2 ausblenden soll, dann ruft Klasse Tab1 eine Methoden in Klasse Tab2 zum Ausblenden auf. Nur wie geht das ohne static zu verwenden????

PS:
Inzwischen sieht mein ganzer Tab-Code-Aufbau anders aus, weil die Code Schnippsel aus den Android-Tutorials dafür eigentlich nicht brauchbar sind!
 
Ich starte dazu besser nochmal einen eigenen Thread...
 
Zurück
Oben Unten