Activity遷移のスタック管理について

2.907 weergaven
Naar het eerste ongelezen bericht

Kou Sumeragi

ongelezen,
8 feb 2011, 00:56:1308-02-2011
aan android-...@googlegroups.com
こんにちは。早速ですが質問させてください。

現在、多数の Activity を遷移するプログラムを作っているのですが、
以下のようなActivity の遷移スタックを取ることは可能でしょうか。

[A] プログラム起動後に実行される Activity
[1]~[3] ユーザーの指定で表示される基本Activity
(デフォルトで [1] が表示される)
[B]~ 基本 Activity ([1]~[3]) から起動する個別の Activity

プログラムを起動したら

[A]→[1]が表示され、[1]~[3]の間で画面遷移を行うが、
ハードウェアキーの Back ボタン(左向き矢印)をクリックした時に
直前の基本Activity が表示されず、アプリケーションを終了させる。

(例)
[A]→[1]→[2]→[3]→[B] と起動した場合、通常の遷移スタックの場合
Back ボタンを押すたびに [B]→[3]→[2]→[1]→[A]→終了、となりますが
[B]→[3]→終了、となるようにしたい。

intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NO_HISTORY) ;

あたりが鍵を握っているような気もするのですが、これで呼び出した
Activity でも Back を押すと呼び出し元の Activity が表示されて
しまいます。

何か勘違いや思い違いなどがありましたら、その点の指摘も含め
ご教授願えれば幸いです、よろしくお願いします。

Keiji Ariyama

ongelezen,
8 feb 2011, 02:52:1708-02-2011
aan android-...@googlegroups.com
有山です。

 Activity 2,1,A で、startActivityで次のActivityを開始した後に、その
ままfinish()で終了するようにしてはいかがでしょうか。

--
Keiji,
ml_an...@c-lis.co.jp

Kou Sumeragi

ongelezen,
10 feb 2011, 02:50:5310-02-2011
aan android-...@googlegroups.com
ああ、なるほど!なんというコロンブスの卵的な。
試してみたところ、思った通りの遷移ができました、
ありがとうございました。

ただ、ついでというのも何ですが、アクティビティを
終了させないで維持したまま、表題のような動作をさせる
事は可能でしょうか。ツイッタークライアントのような
ものを作っているのですが、画面を切り替える毎に
いちいちネットワークにアクセスするのも時間がかかりまして。

よろしければ引き続き、ご教示願えればと思います。

2011年2月8日16:52 Keiji Ariyama <ml_an...@c-lis.co.jp>:

> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>
>

重村浩二

ongelezen,
10 feb 2011, 03:03:1810-02-2011
aan android-...@googlegroups.com

重村と申します。

うまくいくか試せない環境なのですが、setContentViewで利用するレイアウトを切り替えたらどうでしょう?

2011/02/10 16:50 "Kou Sumeragi" <kou...@gmail.com>:



ああ、なるほど!なんというコロンブスの卵的な。
試してみたところ、思った通りの遷移ができました、
ありがとうございました。

ただ、ついでというのも何ですが、アクティビティを
終了させないで維持したまま、表題のような動作をさせる
事は可能でしょうか。ツイッタークライアントのような
ものを作っているのですが、画面を切り替える毎に
いちいちネットワークにアクセスするのも時間がかかりまして。

よろしければ引き続き、ご教示願えればと思います。

2011年2月8日16:52 Keiji Ariyama <ml_an...@c-lis.co.jp>:

> 有山です。
>
> Activity 2,1,A で、startActivityで次のActivityを開始した後に、その
> ままfinish()で終了するようにしてはいかがでしょうか。
>

>...

Kou Sumeragi

ongelezen,
10 feb 2011, 03:52:1610-02-2011
aan android-...@googlegroups.com
回答ありがとうございます。ちょっとワケあって、setContentView を使い回すことが
できない状態なので、アクティビティー単位で切り分けている所存です。

2011年2月10日17:03 重村浩二 <shig...@gmail.com>:

Keiji Ariyama

ongelezen,
10 feb 2011, 04:38:2010-02-2011
aan android-...@googlegroups.com
有山です。

>> アクティビティを
>> 終了させないで維持したまま、表題のような動作をさせる
>> 事は可能でしょうか。ツイッタークライアントのような
>> ものを作っているのですが、画面を切り替える毎に
>> いちいちネットワークにアクセスするのも時間がかかりまして。

>> [A]→[1]→[2]→[3]→[B] と起動した場合、通常の遷移スタックの場合


>> Back ボタンを押すたびに [B]→[3]→[2]→[1]→[A]→終了、となりますが
>> [B]→[3]→終了、となるようにしたい。

 出来るかもしれませんが、おすすめしません。

 ご存知のとおり、Activityは、Androidのシステムによって管理されていま
す。システムは、Activityの状態に応じてonCreateやonDestroyなど各メソッド
を呼びます。これがActivityのライフサイクルです。

 他のActivityを起動したとき、バックグラウンドに回った(onPauseが実行さ
れた)Activityは、いつシステムから終了されてもおかしくない状態にありま
す。したがって、全てのアクティビティをスタック上に保持しているつもりで
も、メモリ不足などの要因で強制的に終了されていて上手く動作しない可能性が
あります。

 本当にきちんと動作させたいなら、ネットワークから取得したデータを保存す
る仕組みを作って、通常の呼び出しではすでに保存されているデータを表示する。
 そして、Activityの起動時にネットワーク接続が必要かどうかをきちんと判定
するのが良いと考えます。

--
Keiji,
ml_an...@c-lis.co.jp

adamrocker

ongelezen,
10 feb 2011, 05:46:5510-02-2011
aan android-...@googlegroups.com
adamrockerです。

これでどうでしょう?

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ActivityA" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Activity1" android:noHistory="true" />
<activity android:name=".Activity2" android:noHistory="true" />
<activity android:name=".Activity3" />
<activity android:name=".ActivityB" />
</application>

2011年2月10日18:38 Keiji Ariyama <ml_an...@c-lis.co.jp>:

Keiji Ariyama

ongelezen,
10 feb 2011, 05:59:4910-02-2011
aan android-...@googlegroups.com
有山です。

 noHistoryですか。いちいちfinishするより、そっちの方がスマートですね。
 勉強になります。

--
Keiji,
ml_an...@c-lis.co.jp

Allen beantwoorden
Auteur beantwoorden
Doorsturen
0 nieuwe berichten