クラスはアクティビティを拡張する必要はありません。次のような追加のパラメーターを追加して、呼び出し元のアクティビティのコンテキストを printMessage メソッドに渡すだけです...
public void printMessage(Context context, String message, int time) {
Toast toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
...
}
編集:あなたのコメントに応えて...
私が知る限り、Android 固有ではないが、Android 要素 (アクティビティのコンテキスト、SharedPreferences など) を使用する必要がある「ヘルパー」クラスを作成しました。多くの場合、これらのものは、上で示した方法で (問題なく) ヘルパー クラスのさまざまなメソッドに渡すことができます。
それは機能しますが、残念ながら、ToastMessages が多すぎます。
わかりましたので、前の Toast がタイムアウトする前に繰り返し呼び出されていることは明らかです。「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 が必要です。少なくとも、私が呼び出している方法は必要です。
繰り返しになりますが、「ヘルパー」クラスのメソッドは、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 と同様のメソッドを使用する簡単な方法はありますか?
理解しておくべきことの 1 つは、Android が「通常の」Java を使用していることです... Android の Activity クラスのようなものは非常に特殊なケースです。あるアクティビティが別のアクティビティをカバーしている場合、最初のアクティビティが存続する期間は保証されません。多くの場合、それは非常に迅速に破棄されます。そのため、あるアクティビティのメソッドを別のアクティビティから呼び出すことができることに依存することはできません。また、Android が機能するはずの方法でもありません。