在 MainActivity.java 文件的什么地方为 android 添加功能?

Where does one add a functionality in the MainActivity.java file for android?

我目前正在学习 Android 开发,对在 MainActivity.java 文件中的何处添加某些功能感到困惑。

一些背景: 我正在使用 Java 在 Android 中设计一个基本的咖啡应用程序。我在 XML 文件中添加了一个浇头复选框。

<CheckBox
        android:id="@+id/checkbox_whipped_cream"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:text="Whipped Cream"
        android:paddingLeft="20dp"
        android:textSize="25dp" />

当我在我的应用程序上单击订购按钮时,我应该能够看到这个鲜奶油复选框已勾选并显示在订单摘要中。

那么,通常应该在 .java 文件中的什么地方添加功能?

这是我目前编写的 java 代码:

package android.example.updated_coffee_app;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {
    int quantity = 0;

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

    public void increment(View view) {
        quantity = quantity + 1;
        display(quantity);
    }

    public void decrement(View view) {
        quantity = quantity - 1;
        display(quantity);
    }

    public void order(View view) {
        CheckBox whippedCream = (CheckBox) findViewById(R.id.checkbox_whipped_cream);
        int price = calculatePrice();
        String priceMessage = createOrderSummary(price);
        displayMessage(createOrderSummary(price));
    }

    private String createOrderSummary(int price) {
        String priceMessage = "Name : Toshali ";
        priceMessage = priceMessage + "\nCoffee Quantity: " + quantity;
        priceMessage = priceMessage + "\nTotal: $" + price;
        priceMessage = priceMessage + "\nThank You!";
        return priceMessage;
    }

    private int calculatePrice() {
        int price = 5 * quantity;
        return price;
    }

    public void displayMessage(String message) {
        TextView orderSummaryTextView = (TextView) findViewById(R.id.order_summary_text_view);
        orderSummaryTextView.setText(message);
    }

    private void display(int numbers) {
        TextView quantityTextView = (TextView) findViewById(R.id.quantityOfCoffee);
        quantityTextView.setText(" " + numbers);
    }

}

一般来说,我对在哪里添加特定代码感到困惑?用什么方法(功能)?或者我们是否为所有组件制作单独的方法?

在图片中,我应该可以看到订单摘要中的'Whipped Cream? : True'。

Whipped Cream Checkbox option

现在您只在 order 运行时检查复选框的状态。 如果你想立即对选中/取消选中的复选框做出反应,你需要指定一个监听器。

复选框允许您在 XML 中指定一个方法,只要其状态随“android:onClick=”发生变化,就会调用该方法。

您可以这样更改代码:

在您的 xml 布局中,将此添加到您的 CheckBox 元素:

android:onClick="onCheckboxClicked"

在您的 activity 中,添加这个新方法:

public void onCheckboxClicked(View view) {
    boolean checked = ((CheckBox) view).isChecked();
    if(checked) {
        // TODO: Show that whipped cream is selected
    }
    else {
        // TODO: Show that whipped cream is not selected
    }
}

参考:https://developer.android.com/guide/topics/ui/controls/checkbox#java

关于 Android 应用程序代码结构的意见

您应该有单独的方法来响应 UI 事件,例如单击按钮和切换复选框。理想情况下,这些方法应该更新 UI 状态对象。

Google 固执己见的建议是,您的 UI 状态应由 UI 状态数据 classes 确定。在您的示例中,UI 状态 class 将保存价格、数量和所选附加物(鲜奶油)的数据。

按下按钮等事件将更新 UI 状态对象。每当您的 UI 状态发生变化时,您都会更新 UI.

在此处查看本指南:https://developer.android.com/jetpack/guide/ui-layer#define-ui-state