Классу не нужно расширять 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.