Timer stoppt

T

Tobls22

Neues Mitglied
0
Hey,
ich habe ein Problem:
ich habe in einem layout einen timer laufen, der einen wert pro sekunde erhöht und bei einem textview ausgegeben wird.
wenn ich jetzt aber auf ein anderes layout wechsle und dann wieder auf das hauptlayout komme, dann ist der textview leer.
Wie kann ich dies verhindern?:confused2:
 
Du kannst es nicht verhindern. ;)

Du müsstest höchstens Dein Layout speichern, und es dann wieder neu zeichnen. Du könntest natürlich auch mit Fragmenten und Activities arbeiten.

Der Timer hat nichts damit zu tun.

Und sonst: Building Your First App | Android Developers

Frage: Wird es ein Spiel? ;)
 
Ja, es wird ein Spiel, aber wie kann man das Layout denn neu zeichnen?
 
hi wenn es kein zu kompliziertes spiel mit rpg elementen und 1000 leveln ist wird ich das ding als "One Activity"-App realisieren...und nicht verschiedene layout sondern eine einzige surfaceview(diese eignet sich hervorraggend für spiele oder andere sachen die regelmäßig gezeichnet werden sollen)...ganz normale views sind nciht zu empfehlen allein schon performance technisch
 
Ich kenne mich mit surface views jetzt leider nicht so aus,
Kann mir vielleicht jemand ein codebeispiel senden, bei dem auf dem surface view ein knopf und ein textview sind?
 
eine surfaceview kann keine childs(textview buttons etc) beinhalten.du kannst aber natürlich bitmaps darauf malen in der form von buttons oder anderen sachen so wie du sie kennst und eine abfrage stellen ob und auf was gerade gedrückt wurde dazu benutzt die surfaceview die emthode onTouch(TouchEvent evt)
mit evt.getX() bzw getY() bekommst du die koordinaten des touches(down, move, up) und kannst diese verarbeiten...

Eine andere Möcglichkeit ist eine surfaceview in eine view einzubinden und buttons textview etc darpüber "schweben" zu lassen!
 
Wenn du nicht gerade viel Animation brauchst, einfach ein paar Views umfärben, brauchst du kein SurefaceView. Da schießt du mit Kanonen auf Spatzen.

Es geht auch einfacher.

SurefaceView's braucht man, wenn man echt schnell Grafiken oder Bilder zeichnen muss (zB. die Kamera), oder OpenGl benutzen möchte.

Hier ein paar Erklärungen von Google:

Eine Übersicht über alle Animationen: Animation and Graphics Overview | Android Developers

und

Building Apps with Graphics & Animation | Android Developers

SurefaceView:

Canvas and Drawables | Android Developers

Wenn du nur das Layout neu zeichnen willst, reicht es meistens alle Views aus dem ContentView zu entfernen, und diese dann neu zu zeichnen. Das ist wesentlich weniger foo bar. ;)

Add and Remove Views in Android Dynamically? - Stack Overflow
 
markus.tullius schrieb:
SurefaceView's braucht man, wenn man echt schnell Grafiken oder Bilder zeichnen muss (zB. die Kamera), oder OpenGl benutzen möchte.

für kamera oder bildbearbeitung gibts auch ncoh die GLSurfaceview die ein bisschen komplizierter zu implementieren ist...für spiele benutzt man imho die surfaceview wegen der performance(eine view ist zu langsam für meinen geschmack und man aht weniger kontrolle)....für 3D Spiele wäre aber diese schon wieder ungeeignet aber nciht die GL-SV
 
Eine view kannst du mit invalidate veranlassen sich neu zu zeichnen falls du das meinst
 
markus.tullius schrieb:
Du kannst es nicht verhindern. ;)

Du müsstest höchstens Dein Layout speichern, und es dann wieder neu zeichnen. Du könntest natürlich auch mit Fragmenten und Activities arbeiten.

Wie kann ich das layout denn speichern und neu zeichnen?
 
package de.tobls.steinbruchklicker;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewDebug;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;



public class Hauptklasse extends ActionBarActivity {

//Elemente
protected TextView Textview_Steinbruch_Stein_Anzahl;
protected TextView TextView_Steinbruch_Stein_Steine_pro_Sekunde;

//Variablen
protected long Anzahl_Steine = 0;
protected long Klickerhöhung_Steine = 1;
protected long Steine_pro_Sekunde = 1;
int i = 1;

//SharedPreferences
protected SharedPreferences Speicher;
protected SharedPreferences.Editor Speichereditor;

//Strings
protected final String KEY ="Dakommsteniedrauf";

//Handler
protected final Handler Handler_Steine = new Handler();

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

//Initialisierung von Elementen
Textview_Steinbruch_Stein_Anzahl = (TextView) findViewById(R.id.TextView_Steinbruch_Stein_Anzahl);
Textview_Steinbruch_Stein_Anzahl.setText(Long.toString(Anzahl_Steine));
TextView_Steinbruch_Stein_Steine_pro_Sekunde = (TextView) findViewById(R.id.TextView_Steinbruch_Stein_Steine_pro_Sekunde);

//SharedPreferences
Speicher = this.getSharedPreferences("Speicherdatei", MODE_MULTI_PROCESS);
Speichereditor = Speicher.edit();

Anzahl_Steine = Speicher.getLong(KEY, Anzahl_Steine);
Textview_Steinbruch_Stein_Anzahl.setText(String.valueOf(Anzahl_Steine));

//Timer
Timer Timer_Steine = new Timer();
Timer_Steine.schedule(new TimerTask() {
@Override
public void run() {UpdateGUI_Steine();}
}, 0, 1000);

}

//UpdateGUI
protected void UpdateGUI_Steine() {
Anzahl_Steine = Anzahl_Steine + Steine_pro_Sekunde;
Speichereditor.putLong(KEY, Anzahl_Steine);
Speichereditor.commit();
Handler_Steine.post(Runnable_Steine);

}

//Runnable
final Runnable Runnable_Steine = new Runnable() {
public void run() {
Textview_Steinbruch_Stein_Anzahl.setText(String.valueOf(Anzahl_Steine));
TextView_Steinbruch_Stein_Steine_pro_Sekunde.setText(String.valueOf(Steine_pro_Sekunde + " Steine pro Sekunde"));
}
};

//Knöpfe
public void Knopf_Übersicht_zu_Steinbruch_Stein (View view) {
setContentView(R.layout.layout_steinbruch_stein);
startActivity(new Intent(Hauptklasse.this, Hauptklasse.class));
}
public void Knopf_Steinbruch_Stein_ZuÜbersicht (View view) {
setContentView(R.layout.layout_uebersicht);
}
public void Fotoknopf_Steinbruch_Stein_Klicker (View view) {
Anzahl_Steine = Anzahl_Steine + Klickerhöhung_Steine;
Textview_Steinbruch_Stein_Anzahl.setText(Long.toString(Anzahl_Steine));
}






}

So, also das ist mein Code.
Wie kann ich es machen, dass ich wenn ich vom layout_Steinbruch_Stein ins layout_Übersicht und wieder zurück wechsle, der Textview Steinbruch_Stein_Anzahl und Steinbruch_Stein_Steine_pro_Sekunde leer sind?
Kann ich die irgendwie neu laden?
Kann mir wenn jemand weis wie es geht ein codebeispiel senden wie es geht?
Ich brauche eure Hilfe wirklich!
Schonmal Danke im Voraus
 

Ähnliche Themen

M
Antworten
2
Aufrufe
895
maksimilian
M
Y
Antworten
7
Aufrufe
1.781
Yothri
Y
znieh99
  • Gesperrt
  • znieh99
Antworten
4
Aufrufe
1.402
hagex
hagex
Zurück
Oben Unten