2

3つのクラスがあります。1つはメインアクティビティ(MainMapという名前)、1つは非アクティビティクラス(MyItemizedOverlayという名前)、もう1つはアクティビティクラス(AudioStreamという名前)です。非アクティビティクラスからAudioStreamアクティビティを開始したいのですが、方法がわかりません。私はこれを3番目のクラス(MyItemizedOverlayと呼ばれる)で試しました:

            Intent myIntentA = new Intent(MainMap.this, AudioStream.class);
            myIntentA.putExtra(AUDIO_STREAM,AUDIO_STREAM_URL);
            MojProg.this.startActivity(myIntentA);

しかし、それは機能しません、と言います:タイプMainMapの囲んでいるインスタンスはスコープ内でアクセスできません

私は何をすべきか?MainMap.thisの代わりに何を書くべきですか?

4

2 に答える 2

2

これはJavaの質問であるため、Androidの質問ではありません。「MyItemizedOverlay」を「MainMap」の内部クラスにしない限り ( http://forums.sun.com/thread.jspa?threadID=690545を参照)、本当に必要なのは MyItemizedOverlay が内部参照を格納することです。 inent に使用する MainMap オブジェクト。

よろしく、マーク

于 2010-01-02T18:29:49.420 に答える
0
Intent myIntentA = new Intent(MainMap.this, AudioStream.class);
myIntentA.putExtra(AUDIO_STREAM,AUDIO_STREAM_URL);
MojProg.this.startActivity(myIntentA);

これはうまくいきません。「これ」は「このクラス」を意味するからです。別のクラスでは使用できません(はい、使用できますが、別の方法があります。フォーラム、このサイト、またはオラクル Web サイトで「これ」について学習してください。)。それがその警告の理由です。

あなたの質問は「コンテキストをアクティビティ以外のクラスにプルするにはどうすればよいですか?」のようです。(Intent() の最初のパラメータは Context です)。

これを行うには、メイン アクティビティで Context インスタントを作成し、次のようにベース コンテキストをそれに割り当てます。

static Context context;

....

context = this.getBaseContext();

それがあなたの主な活動だったことを忘れないでください。次に、アクティビティ以外のクラスで、このコンテキストをプルして、次のような意図で使用できます。

Context context;
Intent intent;

....Constructor: 

context = MainActivity.context;
intent = new Intent(context, YourSecondActivity.class); // you have to declare your second activity in the AndroidManifest.xml 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this is required to call "Intent()" in a non-activity class.

//And then you can call the method anywhere you like (in this class of course)

context.startActivity(intent);

Ok。もう 1 つの手順を実行すると、準備が整います。AndroidManifest.xml で、2 番目のアクティビティを最初のアクティビティと同様に宣言します。

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity 
        android:name=".YourSecondActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
    </activity>

あなたは今準備ができています。ただし、最後の警告として、遅延を避けるために、別のアクティビティを開く前にアクティビティを破棄することを忘れないでください。楽しむ。

于 2012-12-10T16:59:22.687 に答える