Juten Tach!
Ich habe ein kleines Programm in dem der selbe Code 5 mal vorkommt.
Dieser Code (de-)aktiviert Knöpfe abhängig davon, welche an und aus sind (isn kleines Logikspielchen).
Mein Problem:
Ich will diesen Code in eine Funktion auslagern. Dann aber hat der Code keinen Zugriff mehr auf den Status der jeweiligen Knöpfe, vermutlich wg. Namespace-Fu.
Nun sollte das ja (wg. "no side effects") an sich so sein, dass ich die Funktion aufrufe, ihr die 5 Werte (5 Knöpfe je an oder aus) als Parameter übergebe und 5 Werte zurückerhalte, mit denen ich die Knöpfe dann (de-)aktiviere.
Wenn ich das so implementiere brauchts aber genausoviel oder noch mehr Code, ich möchte deshalb, dass sich die Funktion die Info selber holt und die Knöpfe selbst (de-)aktiviert.
Ist es denn nicht möglich aus einer Methode auf Kram in einer anderen Methode zuzugreifen, und wenn doch, wie ist die korrekte Syntax (hab schon diverses probiert, Tutorials halb kopiert, nix ging)?
Hier der Quellcode:
[Java]package com.blatest.Vecti3;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
public class play extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play);
final CompoundButton buttonH = (ToggleButton) findViewById(R.id.ToggleButtonH);
final CompoundButton buttonR = (ToggleButton) findViewById(R.id.ToggleButtonR);
final CompoundButton buttonS = (ToggleButton) findViewById(R.id.ToggleButtonS);
final CompoundButton buttonV = (ToggleButton) findViewById(R.id.ToggleButtonV);
final CompoundButton buttonW = (ToggleButton) findViewById(R.id.ToggleButtonW);
buttonH.setEnabled(false);
buttonS.setEnabled(false);
buttonV.setEnabled(false);
OnClickListener buttonHlistener = new OnClickListener(){
public void onClick(View v) {
buttonR.toggle();
buttonS.toggle();
buttonV.toggle();
buttonW.toggle();
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonH.setOnClickListener(buttonHlistener);
OnClickListener buttonRlistener = new OnClickListener(){
public void onClick(View v) {
buttonW.setChecked(buttonR.isChecked());
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonR.setOnClickListener(buttonRlistener);
OnClickListener buttonSlistener = new OnClickListener(){
public void onClick(View v) {
if(buttonS.isChecked()){
buttonW.setChecked(buttonH.isChecked());
}else{
buttonV.setChecked(buttonW.isChecked());
}
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonS.setOnClickListener(buttonSlistener);
OnClickListener buttonVlistener = new OnClickListener(){
public void onClick(View v) {
buttonR.toggle();
buttonV.setChecked(false);
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonV.setOnClickListener(buttonVlistener);
OnClickListener buttonWlistener = new OnClickListener(){
public void onClick(View v) {
if(! buttonW.isChecked()){
buttonR.setChecked(false);
buttonW.setChecked(buttonV.isChecked());
buttonH.setChecked(buttonV.isChecked());
}
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonW.setOnClickListener(buttonWlistener);
}
}[/code]
Der Code um den es geht sind die 5 aufeinander folgenden if-Statements.
Danke schonmal und Allen einen schönen Tag!
Ich habe ein kleines Programm in dem der selbe Code 5 mal vorkommt.
Dieser Code (de-)aktiviert Knöpfe abhängig davon, welche an und aus sind (isn kleines Logikspielchen).
Mein Problem:
Ich will diesen Code in eine Funktion auslagern. Dann aber hat der Code keinen Zugriff mehr auf den Status der jeweiligen Knöpfe, vermutlich wg. Namespace-Fu.
Nun sollte das ja (wg. "no side effects") an sich so sein, dass ich die Funktion aufrufe, ihr die 5 Werte (5 Knöpfe je an oder aus) als Parameter übergebe und 5 Werte zurückerhalte, mit denen ich die Knöpfe dann (de-)aktiviere.
Wenn ich das so implementiere brauchts aber genausoviel oder noch mehr Code, ich möchte deshalb, dass sich die Funktion die Info selber holt und die Knöpfe selbst (de-)aktiviert.
Ist es denn nicht möglich aus einer Methode auf Kram in einer anderen Methode zuzugreifen, und wenn doch, wie ist die korrekte Syntax (hab schon diverses probiert, Tutorials halb kopiert, nix ging)?
Hier der Quellcode:
[Java]package com.blatest.Vecti3;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
public class play extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play);
final CompoundButton buttonH = (ToggleButton) findViewById(R.id.ToggleButtonH);
final CompoundButton buttonR = (ToggleButton) findViewById(R.id.ToggleButtonR);
final CompoundButton buttonS = (ToggleButton) findViewById(R.id.ToggleButtonS);
final CompoundButton buttonV = (ToggleButton) findViewById(R.id.ToggleButtonV);
final CompoundButton buttonW = (ToggleButton) findViewById(R.id.ToggleButtonW);
buttonH.setEnabled(false);
buttonS.setEnabled(false);
buttonV.setEnabled(false);
OnClickListener buttonHlistener = new OnClickListener(){
public void onClick(View v) {
buttonR.toggle();
buttonS.toggle();
buttonV.toggle();
buttonW.toggle();
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonH.setOnClickListener(buttonHlistener);
OnClickListener buttonRlistener = new OnClickListener(){
public void onClick(View v) {
buttonW.setChecked(buttonR.isChecked());
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonR.setOnClickListener(buttonRlistener);
OnClickListener buttonSlistener = new OnClickListener(){
public void onClick(View v) {
if(buttonS.isChecked()){
buttonW.setChecked(buttonH.isChecked());
}else{
buttonV.setChecked(buttonW.isChecked());
}
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonS.setOnClickListener(buttonSlistener);
OnClickListener buttonVlistener = new OnClickListener(){
public void onClick(View v) {
buttonR.toggle();
buttonV.setChecked(false);
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonV.setOnClickListener(buttonVlistener);
OnClickListener buttonWlistener = new OnClickListener(){
public void onClick(View v) {
if(! buttonW.isChecked()){
buttonR.setChecked(false);
buttonW.setChecked(buttonV.isChecked());
buttonH.setChecked(buttonV.isChecked());
}
if(buttonW.isChecked()){buttonH.setEnabled(true);}else{buttonH.setEnabled(false);}
if(! buttonH.isChecked()){buttonW.setEnabled(true);}else{buttonW.setEnabled(false);}
if(buttonR.isChecked() && buttonV.isChecked()){buttonS.setEnabled(true);}else{buttonS.setEnabled(false);}
if( (! buttonV.isChecked()) && (! buttonS.isChecked()) && buttonH.isChecked()){buttonV.setEnabled(true);}else{buttonV.setEnabled(false);}
if(buttonR.isChecked() == buttonS.isChecked() && buttonR.isChecked() == buttonV.isChecked()){buttonR.setEnabled(true);}else{buttonR.setEnabled(false);}
}
};
buttonW.setOnClickListener(buttonWlistener);
}
}[/code]
Der Code um den es geht sind die 5 aufeinander folgenden if-Statements.
Danke schonmal und Allen einen schönen Tag!