Передача переменных в другой класс - PullRequest
0 голосов
/ 25 мая 2018

У меня сейчас проблема в том, что я не знаю точно, как управлять своими переменными.

В настоящее время у меня есть 5 действий.И тем самым 5 классов Java.Из 3 класса вар.всегда можно увидеть.

Первые два класса снабжены только кнопками.В третьем классе я определил свои переменные (public static int Money = 100).В классе 4 я прихожу в класс 5, где меняются переменные (Butto (-10)).Внедрив обновление, я могу изменить вар.нажав на кнопку (в классе 5) (например, 90 денег).

Вот моя проблема.Если я сейчас перейду к занятию 4 (с кнопкой «Назад» справа от кнопки «Домой»), оно все еще стоит старого значения (100).Если я пойду в класс 3, это все равно.Когда я хочу вернуться назад, я сажусь на занятие 2, которое пусто.Но когда я иду сейчас снова в 3 или 4, значения обновляются (сейчас 90 денег).Как это можно сделать напрямую?

Как лучше всего справляться с такими переменными?У меня, конечно, есть 10 других значений, на которые влияет проблема.

То есть код в классе 3, где я определяю переменную, равен классу 4.

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_class3);

    //Header
    TextView MoneyView = findViewById(R.id.outputmoney);
    MoneyView.setText(String.valueOf(class3.money));......}

Thets объявление в классе4 и 5

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_class4);

TextView moneyView = findViewById(R.id.outputmoney);
MoneyView.setText(String.valueOf(class3.money));

BG и спасибо

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Как и другие, вы можете использовать синглтон.Я бы порекомендовал никогда не использовать статические значения в любой деятельности.Если вам нужно это значение в глобальном масштабе, переместите его на уровень приложения.

Я просто приведу вам базовый пример, но вы можете сделать гораздо больше с решением, подобным этому.

Сначала создайте класс, расширяющий Application.

public class MyApp extends Application() {

     public static int money = 100;
     // any other values you want in here

}

И убедитесь, что вы обновили манифест, чтобы использовать этот новый класс.

<application
        android:name="com.example.MyApp"
        //...
        >

Теперь в любом действии вы можете получить к нему доступ.

MoneyView.setText(String.valueOf(MyApp.money));

Кроме того, если вы откроете действие, измените это значение и вернетесь к предыдущему действию, оно не будет отражать обновленное значение.Чтобы обновить его до обновленного значения, вы захотите переместить логику в onResume.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_class3);
}

protected void onResume() {
    //Header
    TextView MoneyView = findViewById(R.id.outputmoney);
    MoneyView.setText(String.valueOf(MyApp.money));
}
0 голосов
/ 25 мая 2018

Я не очень хорошо знаком с разработкой для Android, и, возможно, есть более быстрый способ сделать это, но вы можете рассмотреть возможность реализации шаблона синглтона в этом сценарии;если вы не знакомы с ним, это означает создание нового класса (отдельного от какой-либо вашей деятельности), в котором существует только один экземпляр в памяти для всего жизненного цикла приложения.Когда значение предоставляется пользователем, пусть действие в свою очередь задает значение для вашего одноэлементного объекта, который будет доступен для любых ваших действий.Вот ссылка, если необходимо: https://www.tutorialspoint.com/design_pattern/singleton_pattern.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...