Прежде чем углубиться в это, я очень плохо знаком с Android, и я только начал изучать Java в прошлом месяце. Я столкнулся с трудностями, пытаясь разработать свое первое простое приложение. Большинство из этих препятствий были преодолены благодаря случайным онлайн-учебникам. МОЙ КОД ОЧЕНЬ МЕССИ. Любые советы приветствуются.
Вышеупомянутый вопрос довольно широк, но я хочу сделать следующее: по сути, это калькулятор содержания алкоголя в крови / отслеживатель напитков. Базовая раскладка: http://i.imgur.com/JGuh7.jpg
Кнопки внизу - это обычные кнопки, а не кнопки ImageButton (с этим были проблемы). Вот пример кода:
<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_marginRight="5dp"
android:background="@drawable/addbeer"/>
Все кнопки и TextView находятся в main.xml.
У меня есть переменные, определенные в классе Global.java:
package com.dantoth.drinkingbuddy;
import android.app.Activity;
открытый класс Global extends Activity {
public static double StandardDrinks = 0;
public static double BeerOunces = 12;
public static double BeerPercentAlcohol = .05;
public static double BeerDrink = BeerOunces * BeerPercentAlcohol;
public static double BeerDrinkFinal = BeerDrink * 1.6666666;
public static double ShotOunces = 1.5;
public static double ShotPercentAlcohol = .4;
public static double ShotDrink = ShotOunces * ShotPercentAlcohol;
public static double ShotDrinkFinal = ShotDrink * 1.6666666;
public static double WineOunces = 5;
public static double WinePercentAlcohol = .12;
public static double WineDrink = WineOunces * WinePercentAlcohol;
public static double WineDrinkFinal = WineDrink * 1.6666666;
public static double OtherOunces;
public static double OtherPercentAlcohol;
public static double OtherDrink = OtherOunces * (OtherPercentAlcohol * .01);
public static double OtherDrinkFinal = OtherDrink * 1.6666666;
public static double GenderConstant = 7.5; //9 for female
public static double Weight = 180;
public static double TimeDrinking = 60;
public static double Hours = TimeDrinking / 60;
public static double Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);
}
Последняя переменная является важной частью. Он рассчитывает ваш BAC на основе вовлеченных факторов.
Когда я нажимаю кнопку добавления пива (Button01), я добавляю 1 к стандартным напиткам, имитируя выпивку одного пива. Другим переменным в формуле Bac присвоены значения в Global.java.
Код, который заставляет пивные кнопки делать что-то, находится в моем обычном классе, drinkbuddy.java:
public class DrinkingBuddy extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Global.StandardDrinks = Global.StandardDrinks + Global.BeerDrinkFinal;
Toast.makeText(DrinkingBuddy.this, "Mmmm... Beer", Toast.LENGTH_SHORT).show();
}
});
По моему мнению, StandardDrinks теперь должно иметь значение 1. Однако, когда я нажимаю кнопку «Рассчитать BAC» (Button05), она просто выводит переменную Bac, как будто StandardDrinks все еще имеет значение 0. Вот код для вычисления Кнопка BAC (Button05):
Кнопка button4 = (Кнопка) findViewById (R.id.Button05);
button4.setOnClickListener (new OnClickListener () {
@Override
public void onClick (View v) {
TextView texty;
texty = (TextView) findViewById(R.id.texty1);
texty.setText("Your BAC is " + Global.Bac );
}
});
В текстовое представление выводится следующее: «Ваш BAC -0.017». Это значение Bac, если StandardDrinks был по-прежнему равен 0, поэтому очевидно, что существует некоторая проблема связи между классами. Кто-нибудь может мне помочь ??
Другие элементы формулы (вес, время, потраченное на употребление алкоголя,% алкоголя и т. Д.) Являются переменными, поскольку в конечном итоге я позволю пользователю изменять эти значения в настройках.
Я слышал от кулера о воде, что глобальные переменные не являются хорошим стилем программирования, но это самое близкое к тому, чтобы заставить его работать. Любые другие способы сделать это очень приветствуются!