2012年12月24日月曜日

Activityを呼ぶ(intent, startActivity)

今回は今いるActivityから、他のActivityを呼ぶ方法を紹介します。

簡単に書くと

intent i = new Intent(this, パッケージ名.クラス名);
startActivity(i);

上記のように実装すると、新たな画面を呼ぶことができます。
ただ、上記の方法だと新しい画面に引数を渡していません。。

引数を使いたい人は

intent i = new Intent(this, パッケージ名.クラス名);
intent.putExtra("キーとなる文字列", "渡したい値");
startActivity(i);

こんな感じで完成です。
特に難しいことはないので、ご安心を。

intent.putExtraは何個でも作れます。


また、


startActivityForResult(intent, 呼び出し元のキーとなる数値);


を使うと、
呼び出し先のActivityが終了したときに、

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    }

にコールバックされます。

詳細は次回にでも。


↓にそれっぽいのを書いておきます。


例)

メインのActivityのボタンを押したら、
次の画面に遷移する。


package com.example.finishactivity;

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

public class MainActivity extends Activity implements OnClickListener{


    private final int iMAIN   = 0;
    private final int iSUB    = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //画面を表示
        setContentView(R.layout.main);
        
        // ボタンの作成
Button button = new Button(getApplication());
button.setText("サブ画面呼び出し");
        //ボタンのID
button.setId(iSUB);
button.setOnClickListener(this);
        //ボタンを画面に追加
addContentView(button, new LinearLayout.LayoutParams( 350,70));

    }

    //クリックした時に呼ばれる
    public void onClick(View view){
        //どのIDのボタンをクリックしたかの判定
        switch(view.getId()){
           case iSUB:
            //開く画面のクラスをインテント
            Intent intent = new Intent(this, SubActivity.class);      
            //引数の作成
            intent.putExtra("count", String.valueOf(iNo));
            iNo += 1;
            //引数を渡して、画面を呼ぶ
            startActivityForResult(intent, iMAIN);
    break;
    default:
    break;
   
    }
    }
}



どうですか?

動きました??

動かない人は
SubActivityを作ってください。
普段のActivityと同じもので大丈夫です。




それでも。うごかない人いますか?
startActivityForResultで止まってしまう人。

その方は

<activity
  android:name="com.example.finishactivity.SubActivity"
    android:label="サブ画面" >
</activity>

をmanifest.xmlに追記してください。

メインアクティビティの </activity>の下にでも追記してください。


以上で、Activityの呼び方は終了です。





おまけとして、


起動と同じくらい大事なのが
終了処理です。

終了処理について、少しだけ触れたページを以前作成致しました。

内容としては

finish();はいいよ。
っていうことでしたね

「内容うっすい」

とみなさん思われたでしょう。

私もそう思います。



本当はいろいろ、紹介したかったのですがね。。。、



まぁ、何であまり細かく書かなかったかというと、
処理の終了という概念が難しいからです。

完全に処理を終わらせるのか?
タスマネに出現しない状態にすればいいのか?
ユーザー目線での処理終了なのか?

なので、一番無難な
finish();
だけにしました。

画面が増えれば増えるほど、
Activityの管理は難しくなります。
また、そのアプリに課金、PUSH通知を実装していれば、
やはり、アプリの終了の仕方が変わります。

まぁ、用はいろいろだということです。

いろいろあるんですけれども、
Androidアプリで、Activtyの管理はとても大切です。

自分のアプリで最適なActivotyを是非見つけてください。

0 件のコメント:

コメントを投稿