Использование методов из деятельности в другой деятельности - PullRequest
1 голос
/ 11 мая 2011

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

Один из методов такой:

    public void printMessage(String message, int time)
    {
       Toast toastMessage = Toast.makeText(this, "", Toast.LENGTH_SHORT);
       toastMessage.setText(message);
       toastMessage.setDuration(time);
       toastMessage.show();
    }

Очевидно, что этот метод требует, чтобы класс расширял Activity, поэтому я предполагаю, что это проблема.

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

Я должен отметить, что я чрезвычайно новичок в Android и новичок в Java.Прямо сейчас я привык к способу создания объекта в Java, а затем выполняю вызов метода с этим объектом.Вот как я на самом деле пробовал здесь, но он работает только с «обычными классами», а не с классами активности.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

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

public void printMessage(Context context, String message, int time) {
    Toast toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    ...
}

EDIT: В ответ на ваш комментарий ...

Из того, что я могу сказать, вы создали класс «помощник», который не специфичен для Android, но нуждается в использовании элементов Android (таких как «Контекст действий»)., SharedPreferences и т. Д.).Во многих случаях эти вещи можно передать в различные методы класса помощника (без проблем), как я продемонстрировал выше.

Это работает, но, к сожалению, сейчас я получаю слишком много ToastMessages.

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

public class MyHelper {

    Toast toastMessage = null;

    public void printMessage(Context context, String message, int time) {
        if (toastMessage != null)
            toastMessage.cancel();
        toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
        ...
    }
}

К сожалению, getSharedPreferences () действительно требует Activity, или, по крайней мере, так, как я ее называю.

Опять же, любые методы вашего класса 'helper' могут быть переданы Context любого действия, которое их вызывает, и это может быть использовано для получения предпочтений и т. Д.

В качестве альтернативы, как упомянутоВ FvZ вы можете расширить класс Application и предоставить доступ к общим настройкам приложения ...

public class MyApp extends Application {

    protected static SharedPreferences UserPrefs = null;

    @Override
    public void onCreate() {
        super.onCreate();
        UserPrefs = getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
    }
}

Все действия можно затем просто использовать (например) ...

MyApp.UserPrefs.putString(...);

В этом случае вы также можете создать свой вспомогательный класс в качестве статического члена вашего Приложения, сделав его доступным для всех операций.

Существует ли более простой способ использования методов, аналогичных обычному Java?

Одна вещь, которую нужно понять, это то, что Android использует «обычную» Java ... просто что-то вроде класса Android Activity - это особый случай.Когда одно действие охватывает другое, у вас нет гарантии того, как долго первое действие останется в живых.Во многих случаях он будет уничтожен очень быстро - по этой причине нельзя полагаться на возможность вызова метода в одном действии из другого.Это также не тот способ, которым должен работать Android.

0 голосов
/ 12 мая 2011

Другим способом является расширение вашего приложения, которое даст вам объект, который будет сохраняться во всем приложении, а затем вы можете передать указатель на ваше действие на все остальные действия, которые вам нужны

...