Witam.
Zaczynam sie uczyć pisać na androida i mam takie pytanie jak powinno dzielić sie klasy pisząc pod androida? Co znaczy że nie powinno łączyć sie UI i logiki? (co to znaczy rozumiem tylko jak to stosować)
Napisałem prosty kalkulator BMI
package pl.danek.BMIcalculator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText weightEditText;
private EditText growthEditText;
private TextView resultTextView;
private Button calculateButton;
public static final String startOfResult="Your bmi is: ";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createComponents();
}
private void createComponents() {
weightEditText=(EditText)findViewById(R.id.weight);
growthEditText=(EditText)findViewById(R.id.growth);
resultTextView=(TextView)findViewById(R.id.result);
resultTextView.setText(startOfResult);
calculateButton=(Button)findViewById(R.id.calculate);
calculateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
calculate();
}
});
}
private void calculate() {
double weight=Double.parseDouble(weightEditText.getText().toString());
double growth=Double.parseDouble(growthEditText.getText().toString());
double bmi=weight/Math.pow(growth, 2);
BMI temp = BMI.getBMIStan(bmi);
String result=bmi+"";
result=result.substring(0, 4);
resultTextView.setText(startOfResult+result+" ("+temp.toString()+")");
}
}
package pl.danek.BMIcalculator;
public enum BMI {
UNKNOWN(Double.MAX_VALUE, -1, "Unknown"),
UNDERWEIGHT(0, 19, "Underweight"),
NORMAL(20, 26, "Normal"),
OVERWEIGHT(26, 31, "Overweight"),
OBESE(31, 44, "Obese"),
DEAD(45, Double.MAX_VALUE, "Probably already dead");
private final double min;
private final double max;
private final String info;
private BMI( double min,double max,String info) {
this.max = max;
this.min = min;
this.info = info;
}
@Override
public String toString(){
return info;
}
public static BMI getBMIStan(double bmiIndex){
for (BMI bmi : BMI.values()) {
if(bmi.isInRange(bmiIndex)){
return bmi;
}
}
return UNKNOWN;
}
private boolean isInRange(double bmiIndex){
return min<bmiIndex && bmiIndex<max;
}
}
I jak zastosować sie do tego zeby nie łączyć logiki z UI? Wystawić metode calculate jako osobny obiekt?