gibt es 2 Klassen; die MainActivity
und SimpleFLashLighImpl
. In MainActivity
Klasse habe ich einen Code, um eine Zeichenfolge aus einem Bearbeitungsfeld 'no' und dann konvertieren es in eine ganze Zahl 'intdelay'. Dies ist MainActivity Teil des Codes:Zugriff auf eine Variable aus verschiedenen Klassen
public static volatile int intdelay = 1000;
textView=(TextView)findViewById(R.id.textView);
delay=(EditText)findViewById(R.id.edttxt);
String no=delay.getText().toString(); //this will get a string
try{
MainActivity.intdelay = Integer.parseInt(no);
}catch(NumberFormatException ex){ // handle your exception
}
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText(delay.getText());
}
});
in der anderen Klasse I den ‚IntDelay‘ int Wert zuzugreifen versuchen eine Verzögerung mit Handler zu machen. Das ist die andere Klasse Teil des Codes:
public void switchFlash() {
final Runnable runnable = new Runnable() {
@Override
public void run() {
if (isFlashOn()) {
turnOffFlash();
x++;
} else if (x>10) {
turnOffFlash();
}
else
{
turnOnFlash();
}
handler.postDelayed(this, MainActivity.intdelay);
}
};
handler.postDelayed(runnable,MainActivity.intdelay);
}
Aber das Problem ist, dass jedes Mal, wenn ich die Verzögerung von 1000 bin immer, die zu Beginn der MainActivity
Klasse initialisiert wird. Was könnte die Lösung sein?
Es gibt keine Anweisung, die die Klassenvariable 'intdelay' ändert, so dass sie immer auf dem Anfangswert von 1000 bleibt. Vielleicht sollte die Anweisung' int intdelay = Integer.parseInt (no) 'dies ändern, aber es wird eingeführt stattdessen eine lokale Blockvariable, die die Klassenvariable unberührt lässt. Aber selbst wenn Sie die Typdeklaration entfernen, wird es möglicherweise nicht das tun, was Sie wollen, weil die Aktion scheinbar in der Methode 'onClick' der Schaltfläche stattfindet, in der Sie die Klassenvariable nicht erneut berühren. – Seelenvirtuose
Irgendwelche Vorschläge? – Aloweiwi