別Activityの終了方法

9,051 views
Skip to first unread message

RYU

unread,
Sep 11, 2011, 8:52:59 PM9/11/11
to 日本Androidの会
お世話になります。
アプリ作成において、分からない点がありますので質問させてください。

OneActivity
TwoActivity
ThreeActivity

があり、OneActivity→TwoActivity→ThreeActivityと遷移していきます。

(1)ThreeActivityが起動された時点で、OneActivityを終了させる、
もしくは
(2)ThreeActivityが起動された時点で、全てのActivityを終了させる(アプリ終了)、
もしくは
(3)TwoActivityが終了された時点で、OneActivityを終了させる、

方法はありますでしょうか。
(3)については、setResultを使ってみたのですが、
Activity終了時に一瞬だけOneActivityが表示されてしまいます。

(1)、(2)、(3)どれかだけでも構いませんので、お助けください。
対応verは1.6以上を予定しております。

どうぞよろしくお願いします。
Message has been deleted
Message has been deleted
Message has been deleted

kurobikari

unread,
Sep 12, 2011, 1:48:14 AM9/12/11
to 日本Androidの会
saramakkuroと申します。
あくまで一例ですが、終了フラグを用意しておき、OnRestart()で実装する方法があります。
以下、参考まで。
//フラグを用意するクラス(getter/setterのみ用意)
public static class Flag{
private boolean finishflg;
public boolean getFinishFlg(){
return finishflg;
}
public void setFinishFlg(boolean flg){
finishflg = flg;
}
}
-------------------------------------------------------
//消す方のActivity側の処理
public class OneActivity extends Activity {
public static Flag mFlag;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mFlag = new Flag();
}
@Override
public void onRestart(){
super.onRestart();
if(mFlag.getFinishFlg() == true){
finish(); //見えてないやつだったらここで死ぬ
}
}
}

-------------------------------------------------------
//表示するActivity側の処理
public class ThreeActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
OneActivity.mFlag.setFinishFlg(true);
finish(); //このActivityの終了
}
}

(1),(2)についてはこの実装で大丈夫かと思います。
(ただし(2)の場合、TwoActivityにもOneActivityと同じ処理が必要です)
実際に動かしてはいませんが、こんな感じかと思います。

kacodama

unread,
Sep 12, 2011, 2:23:33 AM9/12/11
to 日本Androidの会
終了させるための適当なアクションを定義して、ブロードキャストで投げるのはどうでしょう?


On 9月12日, 午前9:52, RYU <riyucom...@gmail.com> wrote:

RYU

unread,
Sep 14, 2011, 10:48:15 AM9/14/11
to 日本Androidの会
お二方様、ご回答ありがとうございました。

saramakkuro様にご教授頂いたようにしましたところ、
思い通りの動作となりました。

しかし、表示するActivity側を透明にしていると
(android:theme="@android:style/
Theme.Translucent.NoTitleBar.Fullscreen")
消す方のActivityが、消えませんでした。

なぜ透明にする必要があるのかを申し上げますと、
表示するActivity側で時間のかかる処理があります。
表示するActivity側を透明にしなかった場合、
画面遷移の際に黒い画面が一定時間表示されてしまいますので、
それを防ぎたいと考えております。

当方アプリ制作に関しては初心者なものですので、
的はずれな事を申し上げているかもしれません。

お手数をお掛けします。


On 9月12日, 午前9:52, RYU <riyucom...@gmail.com> wrote:

saramakkuro

unread,
Sep 14, 2011, 8:14:15 PM9/14/11
to android-g...@googlegroups.com
> しかし、表示するActivity側を透明にしていると
> (android:theme="@android:style/
> Theme.Translucent.NoTitleBar.Fullscreen")
> 消す方のActivityが、消えませんでした。

上記ソースの場合、Finish()はOnRestart()でフックされてるので
下のActivityがアクティブになったときに初めて終了します。
なので、Finish()するタイミングを考える必要があります。
他にも方法はあると思いますが、Activityのライフサイクルでフックするなら
onPause()やonStop()で呼び出すことを試してみてください。


2011年9月14日23:48 RYU <riyuc...@gmail.com>:

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

RYU

unread,
Sep 16, 2011, 6:51:34 AM9/16/11
to 日本Androidの会
saramakkuro様

ご丁寧にありがとうございました。
さっそく試してみます。
Reply all
Reply to author
Forward
0 new messages