Activityの削除について

2,230 views
Skip to first unread message

Takashi

unread,
Feb 8, 2010, 4:41:08 AM2/8/10
to 日本Androidの会
Takashiと申します。

質問がございます。

画面遷移を行なうアプリを作製したいと思っております。

画面遷移はActivityAをルートとして以下のように遷移させたいと思っております。
↓矢印は次のActivityに進むことを表しています。
↑矢印は戻るボタン押し時などに戻れるActivityを表しています。(逆に↑矢印が
無しの状態Activity時では戻るボタンを押してもどこにも遷移させないように
したいと思ってます。)

ActivityA
↓↑
ActivityB
↓↑
ActivityC

ActivityD

ActivityA

上記の実装をどのようにすればよいのでしょうか?
自分でも調べて見ましたがいまいち上手くいっておりません。

戻ることを考慮しなければならないアクテビティもあるのでむやみにfinish()も行なえません。
例えばActivityDまで遷移させたときにActivityA~Cのアクテビティを削除するようなこと
は出来るのでしょうか?

誰かご存知の方がいらっしゃいましたらご教授お願い致したいと思います。

リックス

unread,
Feb 8, 2010, 5:17:24 AM2/8/10
to android-g...@googlegroups.com
リックスです

ちょっと違ってるかもしれませんが
これなんかが応用できないでしょうかね?

はずしてたらすいません

ペコm(_ _;m)三(m;_ _)mペコ
2010年2月8日18:41 Takashi <k-c...@qf7.so-net.ne.jp>:

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


Daisuke Miyakawa

unread,
Feb 8, 2010, 6:09:55 AM2/8/10
to android-g...@googlegroups.com
みやかわです


ActivityA
↓↑
ActivityB
↓↑
ActivityC

ActivityD

ActivityA

最初の[A]には何か情報が残っている、ということでよろしいでしょうか。それとも最後の[A]と最初の[A]は全く独立のActivityでも良いということでしょうか。
前者を前提とすると、次のように作るのはいかがでしょう

[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]
↓↑[D]から伝言はありません                      ↑ [D]からの伝言です
[BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB]
↓  ↑ Dに遷移しない ↓  ↑ Dに遷移してもいい       ↓  ↑ [A]に伝えて
[CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC]   ↓   ↑
                            [DDDDDD]

大変みづらくてすみませんが、つまり[B]に[D]からの情報を返してもらえばよいということです。もちろん[C]から[D]を呼んで、[D]から[C]に、[A]に渡す情報を返してもよいかと思います。

技術的には Activity#startActivityForResult(), Activity#onActivityResult() を駆使することになるかと思います。帰ってきた情報は Intent#getStringExtra() か何かで得れば良いかと。
下方向の矢印は startActivityForResult() をコードで呼び出す形に, 上方向の矢印は onActivityResult() へのコールバックという形になります。

もし上記の説明では不足、もしくはそもそも期待したものではない、ということであればご返答いただければと思います。

それでは。

2010年2月8日19:17 リックス <lic...@gmail.com>:



--
Daisuke Miyakawa (宮川大輔)
d.miy...@gmail.com

Takashi

unread,
Feb 8, 2010, 7:17:25 AM2/8/10
to 日本Androidの会
リックスさん

ご回答ありがとうございます。

現在のActivityをfinish()させれば前のActivityに
戻れるのはわかりました。

ただ、今回はActivityDの遷移時にActivityA~Cの複数のアクテビティ
を一斉に削除しなければなりません…
そのためActivityCのみfinish()して、ActivityDに遷移しても
ActivityA~Bは残ってしまうんですよ…
ActivityDに遷移させるまでActivityB~Aは戻れるようにしなければ
ならないため安易にfinish()も使えませんし…

そうすると中々難しいですかね?

On 2月8日, 午後7:17, リックス <lick...@gmail.com> wrote:
> リックスです
>
> ちょっと違ってるかもしれませんが
> これなんかが応用できないでしょうかね?
>
> http://www.adamrocker.com/blog/289/activity_open_close_animation.html
>
> はずしてたらすいません
>
> ペコm(_ _;m)三(m;_ _)mペコ

> 2010年2月8日18:41 Takashi <k-ch...@qf7.so-net.ne.jp>:


>
> > Takashiと申します。
>
> > 質問がございます。
>
> > 画面遷移を行なうアプリを作製したいと思っております。
>
> > 画面遷移はActivityAをルートとして以下のように遷移させたいと思っております。
> > ↓矢印は次のActivityに進むことを表しています。
> > ↑矢印は戻るボタン押し時などに戻れるActivityを表しています。(逆に↑矢印が
> > 無しの状態Activity時では戻るボタンを押してもどこにも遷移させないように
> > したいと思ってます。)
>
> > ActivityA
> > ↓↑
> > ActivityB
> > ↓↑
> > ActivityC
> > ↓
> > ActivityD
> > ↓
> > ActivityA
>
> > 上記の実装をどのようにすればよいのでしょうか?
> > 自分でも調べて見ましたがいまいち上手くいっておりません。
>
> > 戻ることを考慮しなければならないアクテビティもあるのでむやみにfinish()も行なえません。
> > 例えばActivityDまで遷移させたときにActivityA~Cのアクテビティを削除するようなこと
> > は出来るのでしょうか?
>
> > 誰かご存知の方がいらっしゃいましたらご教授お願い致したいと思います。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

> > このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
>

Takashi

unread,
Feb 8, 2010, 7:33:44 AM2/8/10
to 日本Androidの会
みやかわさん

ご回答ありがとうございます。大変参考になります。

ActivityA
↓↑
ActivityB
↓↑
ActivityC

ActivityD

ActivityA

説明不足で大変申し訳ありません。今回は最初と最後の『ActivityA』は特に保持したいデータや
後にデータの取得を求めるものでも無く、全く独立したもので構いません。

startActivityForResult()やonActivityResult()でActivity遷移をさせながらfinis()で
Activityの
終了していけば、確かにActivityDに遷移したときに前のActivityを消せそうな気がしてきました。

http://xn--4dkc.net/index.php?Activity

上記のページのようにActivityはスタック構造になっているようですが、
ActivityDを起動時にこのスタックに詰まれていたものを一度全てクリア
するようなことは出来ないのでしょうか?

On 2月8日, 午後8:09, Daisuke Miyakawa <d.miyak...@gmail.com> wrote:
> みやかわです
>
> ActivityA
> ↓↑
> ActivityB
> ↓↑
> ActivityC
> ↓
> ActivityD
> ↓
> ActivityA
>
> 最初の[A]には何か情報が残っている、ということでよろしいでしょうか。それとも最後の[A]と最初の[A]は全く独立のActivityでも良いということでしょうか。
> 前者を前提とすると、次のように作るのはいかがでしょう
>
> [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]
> ↓↑[D]から伝言はありません ↑ [D]からの伝言です
> [BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB]
> ↓ ↑ Dに遷移しない ↓ ↑ Dに遷移してもいい ↓ ↑ [A]に伝えて
> [CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC] ↓ ↑
> [DDDDDD]
>
> 大変みづらくてすみませんが、つまり[B]に[D]からの情報を返してもらえばよいということです。もちろん[C]から[D]を呼んで、[D]から[C]に、[A]に渡す情報を返してもよいかと思います。
>
> 技術的には Activity#startActivityForResult(), Activity#onActivityResult()
> を駆使することになるかと思います。帰ってきた情報は Intent#getStringExtra() か何かで得れば良いかと。
> 下方向の矢印は startActivityForResult() をコードで呼び出す形に, 上方向の矢印は onActivityResult()
> へのコールバックという形になります。
>
> もし上記の説明では不足、もしくはそもそも期待したものではない、ということであればご返答いただければと思います。
>
> それでは。
>

> 2010年2月8日19:17 リックス <lick...@gmail.com>:


>
>
>
> > リックスです
>
> > ちょっと違ってるかもしれませんが
> > これなんかが応用できないでしょうかね?
>
> >http://www.adamrocker.com/blog/289/activity_open_close_animation.html
>
> > はずしてたらすいません
>
> > ペコm(_ _;m)三(m;_ _)mペコ

> > 2010年2月8日18:41 Takashi <k-ch...@qf7.so-net.ne.jp>:


>
> > Takashiと申します。
>
> >> 質問がございます。
>
> >> 画面遷移を行なうアプリを作製したいと思っております。
>
> >> 画面遷移はActivityAをルートとして以下のように遷移させたいと思っております。
> >> ↓矢印は次のActivityに進むことを表しています。
> >> ↑矢印は戻るボタン押し時などに戻れるActivityを表しています。(逆に↑矢印が
> >> 無しの状態Activity時では戻るボタンを押してもどこにも遷移させないように
> >> したいと思ってます。)
>
> >> ActivityA
> >> ↓↑
> >> ActivityB
> >> ↓↑
> >> ActivityC
> >> ↓
> >> ActivityD
> >> ↓
> >> ActivityA
>
> >> 上記の実装をどのようにすればよいのでしょうか?
> >> 自分でも調べて見ましたがいまいち上手くいっておりません。
>
> >> 戻ることを考慮しなければならないアクテビティもあるのでむやみにfinish()も行なえません。
> >> 例えばActivityDまで遷移させたときにActivityA~Cのアクテビティを削除するようなこと
> >> は出来るのでしょうか?
>
> >> 誰かご存知の方がいらっしゃいましたらご教授お願い致したいと思います。
>
> >> --
> >> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> >> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

> >> このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> >> 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>

> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

> > このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>

> --
> Daisuke Miyakawa (宮川大輔)
> d.miyak...@gmail.com

Daisuke Miyakawa

unread,
Feb 8, 2010, 7:46:05 AM2/8/10
to android-g...@googlegroups.com
あら

すみません。勘違いしていました。
Activityは基本的にはスタックに「出来る」だけで、「戻る」機能をオフには出来ます。

以下はサンプルコードです。BからはActivityTransitionExp には戻れないです。
これで大丈夫でしょうか

---------------
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ActivityTransitionExp extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button)findViewById(R.id.next)).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(ActivityTransitionExp.this, B.class);
                        startActivity(intent);
                    }
                });
       
    }
}
--------------

--------------
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

public class B extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b);
    }
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return true;
        }
        return false;
    }
}


2010年2月8日21:33 Takashi <k-c...@qf7.so-net.ne.jp>:
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。

Takashi

unread,
Feb 8, 2010, 8:04:01 PM2/8/10
to 日本Androidの会
みやかわさん

ご回答ありがとうございます。

度々説明不足な店がありまして、誠に申し訳ありません
でした。

ご提供に頂きましたコードを実行しましたところ、class Bから前に戻らない
ことを確認致しました。キーイベントをハンドリングすれば問題解決するようで
助かりました。

また、何かわからない事が出来たら質問させて頂く事もありますが、何卒
よろしくお願い致します。ご協力ありがとうございました。

> 2010年2月8日21:33 Takashi <k-ch...@qf7.so-net.ne.jp>:

> > <android-group-japan%2Bunsu...@googlegroups.com<android-group-japan%252Buns...@googlegroups.com>


> > >にメールを送信してください。
> > > >> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> > からこのグループにアクセスしてください。
>
> > > > --

> > > > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > > > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > > > このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>

> > <android-group-japan%2Bunsu...@googlegroups.com<android-group-japan%252Buns...@googlegroups.com>


> > >にメールを送信してください。
> > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> > からこのグループにアクセスしてください。
>
> > > --
> > > Daisuke Miyakawa (宮川大輔)
> > > d.miyak...@gmail.com
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

Daisuke Miyakawa

unread,
Feb 8, 2010, 9:13:46 PM2/8/10
to android-g...@googlegroups.com
希望に沿えて何よりです。

私が対応出来ないときも他の方が返答していただけることを期待してまた送っていただけると、むしろ会自体が賑やかになって良いかと思います。
FAQも揃うでしょうし =)

ではでは。

2010年2月9日10:04 Takashi <k-c...@qf7.so-net.ne.jp>:
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
Daisuke Miyakawa (宮川大輔)
d.miy...@gmail.com

Tetsuro Nakamura

unread,
Feb 9, 2010, 9:51:46 AM2/9/10
to android-g...@googlegroups.com
はじめまして。t2lowと申します。

既に解決されているようですが、別の方法についてご報告します。

startActivity()にセットするIntentにsetFlags()にて
FLAG_ACTIVITY_CLEAR_TOPをセットすることで、
これまでの履歴を消去した上でActivityを起動させることができるようです。
ただ、Activiyの遷移の仕方によっては、
完全に履歴が消えないこともあるようです。
すみませんが、そこから先は調べられていません。
おそらく希望の動きをするのではないかと思いますが、
試してはいませんのでお時間あればご確認下さい。

以上、よろしくお願いします。

Takashi

unread,
Feb 14, 2010, 8:24:11 AM2/14/10
to 日本Androidの会
t2lowさん

はじめまして。質問者のTakashiです。

お返事遅くなり申し訳ありません。

本日、ご指摘に頂きました『FLAG_ACTIVITY_CLEAR_TOP』
をIntentのフラグに設定しました所、私の望み通りの
動作を確認しました。

簡単に出来たので大変大助かりです。
また何かありましたらよろしくお願い致します。

On 2月9日, 午後11:51, Tetsuro Nakamura <t2lo...@gmail.com> wrote:
> はじめまして。t2lowと申します。...
>
> もっと読む ≫


>
> 既に解決されているようですが、別の方法についてご報告します。
>
> startActivity()にセットするIntentにsetFlags()にて
> FLAG_ACTIVITY_CLEAR_TOPをセットすることで、
> これまでの履歴を消去した上でActivityを起動させることができるようです。
> ただ、Activiyの遷移の仕方によっては、
> 完全に履歴が消えないこともあるようです。
> すみませんが、そこから先は調べられていません。
> おそらく希望の動きをするのではないかと思いますが、
> 試してはいませんのでお時間あればご確認下さい。
>
> 以上、よろしくお願いします。
>

> On 2010/02/09, at 11:13, Daisuke Miyakawa <d.miyak...@gmail.com> wrote:
>
> 希望に沿えて何よりです。
>
> 私が対応出来ないときも他の方が返答していただけることを期待してまた送っていただけると、むしろ会自体が賑やかになって良いかと思います。
> FAQも揃うでしょうし =)
>
> ではでは。
>

> 2010年2月9日10:04 Takashi <k-ch...@qf7.so-net.ne.jp>:

> > 最初の[A]には何か情報が残っている、ということでよろしいでしょうか。それとも最後の[A]と最初の[A]は全く独立のActivityでも良いということ-でしょうか。
> > > > > 前者を前提とすると、次のように作るのはいかがでしょう
>
> > [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-]


> > > > > ↓↑[D]から伝言はありません ↑ [D]からの伝言です
> > > > > [BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB]
> > > > > ↓ ↑ Dに遷移しない ↓ ↑ Dに遷移してもいい ↓ ↑ [A]に伝えて
> > > > > [CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC] ↓ ↑
> > > > > [DDDDDD]
>

> > 大変みづらくてすみませんが、つまり[B]に[D]からの情報を返してもらえばよいということです。もちろん[C]から[D]を呼んで、[D]から[C]に、[-A]に渡す情報を返してもよいかと思います。

> > > > > >> このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>
> > <android-group-japan%2Bunsu...@googlegroups.com<android-group-japan%252-Buns...@googlegroups.com>
>
> > > > <android-group-japan%2Bunsu...@googlegroups.com<android-group-japan%252-Buns...@googlegroups.com>
> > <android-group-japan%252Buns...@googlegroups.com<android-group-japan%2-5252Bun...@googlegroups.com>


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

> > > > > > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Reply all
Reply to author
Forward
0 new messages