1

ゲームの「メイン」アクティビティがいくつかあり、さまざまなメイン アクティビティで使用されるすべてのメソッドを含むクラスを作成しました。

1 つの方法は次のとおりです。

    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 のオブジェクト作成方法に慣れており、そのオブジェクトでメソッド呼び出しを行っています。ここで実際に試した方法ですが、アクティビティクラスではなく、「通常のクラス」でのみ機能します。

ありがとうございました。

4

2 に答える 2

4

クラスはアクティビティを拡張する必要はありません。次のような追加のパラメーターを追加して、呼び出し元のアクティビティのコンテキストを 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 が機能するはずの方法でもありません。

于 2011-05-11T19:38:23.027 に答える
0

別の方法は、アプリケーションを拡張することです。これにより、すべてのアプリケーションに永続化されるオブジェクトが提供されます。その後、必要な他のすべてのアクティビティにアクティビティへのポインタを渡すことができます

于 2011-05-11T20:11:39.097 に答える