2012年03月27日

遷移先のアクティビティからデータを返す


前回はMainActivityからSubActivityにデータを渡しました
遷移先画面にデータを渡す
今度は逆に遷移画面先からデータを戻すことをしてみたいと思います
まずはMainActivityを以下のように修正します
変更点としては
1.IntentにrequestCodeを追加する
2.SubActivityから戻ってきたときのonActivityResultを追加する

です
(1)のrequestCodeはMainActivityからどのActivityに遷移したかを設定する値です
今回はSubActivityに移動は“1”としていますが
例えばSubActivity2には“2”のように複数の設定が可能です
次に(2)でonActivityResultを追加します
これは遷移した先から戻ってきたときに実行されるものです
はじめにrequestCodeが1かどうか確認し、結果がOKかどうか確認しています
またmainのレイアウトにもtextViewを追加しましたのでそちらも載せておきます
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >


    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="subに移動" />

    <TextView
    	android:id="@+id/textView1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="TextView" />

</LinearLayout>

MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends Activity {
     int requestCode=1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setTitle("MainActivity");
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				//intentの作成
				Intent intent = new Intent(MainActivity.this,SubActivity.class);
				//putExtraで渡す値を設定
				intent.putExtra("int Value", 100);
				intent.putExtra("String Value", "test");
				
				//intentをスタート
				startActivityForResult(intent, requestCode);
			}
		});
        
    }
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == 1) {
	        if (resultCode == RESULT_OK) {
	            CharSequence return_string = 
	            		data.getCharSequenceExtra("return String");
	            //id textView1をt1に当てはめている
	            TextView t1 = (TextView)findViewById(R.id.textView1);
	            //受け取った値を表示
	            t1.setText("受け取った文字は"+return_string);
	        }
	    }
	}


}


次にSubActivityを修正します
こちらはfinish()でActivityを終了する直前にMainActivityに
値を渡しています
今回はtest2というStringを戻します
その後setResultでRESULT_OKと設定したintentを送信し
finishで終了させます
以下SubActivity.java
package blog.test;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class SubActivity extends Activity {
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
        setTitle("SubActivity");
        
		Intent intent = getIntent();
		//MainActivityから値を受け取る
		int getint = intent.getIntExtra("int Value",0);
		CharSequence getstring = intent.getCharSequenceExtra("String Value");
        
        
        //id textView1をt1に当てはめている
        TextView t1 = (TextView)findViewById(R.id.textView1);
        //id textView1をt2に当てはめている
        TextView t2 = (TextView)findViewById(R.id.textView2);
        
        //受け取った値を表示
        t1.setText("受け取った数値は"+String.valueOf(getint));
        t2.setText("受け取った文字は"+getstring);
        
        
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
				//intentの作成
				Intent intent = new Intent(SubActivity.this,MainActivity.class);
				//putExtraで渡す値を設定
				intent.putExtra("return String", "test2");
				setResult(RESULT_OK, intent);
				finish();
            }
            });
        }
     

}
まず実行するとMainActivityが表示されます
device62.png
textView1の初期値はなにも設定していないのでTextViewと表示されます
一度SubActivityに移動し・・・
device63.png

戻ってくると・・・
device64.png
TextView1が変化しているのがわかります

スポンサードリンク

posted by kenken at 15:31 | Comment(0) | TrackBack(0) | インテント 画面遷移 | このブログの読者になる | 更新情報をチェックする
2012年03月26日

遷移先画面にデータを渡す


画面遷移の基本は以下を参照してください
画面遷移をおこなう(1
画面遷移をおこなう(2)
今回は画面遷移前から遷移後にデータを渡したいと思います
遷移先画面にデータを受け渡すには、インテントにputExtraを使って
渡したいデータのキー文字列と値を指定して渡します
今回は数値“100”と文字“test”をメインアクティビティからサブアクティビティに
データを渡してみたいと思います
まずはMainActivityにputExtraを追記します
javaソースを以下のように修正します
package blog.test;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setTitle("MainActivity");
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	//intentの作成
            	Intent intent = new Intent(MainActivity.this,SubActivity.class);
    			//putExtraで渡す値を設定
            	intent.putExtra("int Value", 100);
    			intent.putExtra("String Value", "test");
            	
            	//intentをスタート
            	startActivity(intent);
            }
            });
        }
     

}
intent.putExtra("int Value", 100);で100を
intent.putExtra("String Value", "test");でtestをそれぞれ送っています

つぎにsubActivityのレイアウトのxmlソースを以下のように修正します
追加部分はtextViewを2つ追加しただけです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >

    <TextView
    	android:id="@+id/textView1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="TextView" />

    <TextView
    	android:id="@+id/textView2"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="TextView" />


    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="mainに戻る" />

</LinearLayout>

最後にSubActivityを修正します
数値を受け取るにはgetIntExtra
文字を受け取るにはgetCharSequenceExtra
を使います
数値を受け取る部分に
int getint = intent.getIntExtra("int Value",0);
を追記します
("int Value",0)の二項目目の“0”は初期値を入力します
もし何も送られていない場合はこちらが採用されます
以下javaソースです
package blog.test;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class SubActivity extends Activity {
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
        setTitle("SubActivity");
        
		Intent intent = getIntent();
		//MainActivityから値を受け取る
		int getint = intent.getIntExtra("int Value",0);
		CharSequence getstring = intent.getCharSequenceExtra("String Value");
        
        
        //id textView1をt1に当てはめている
        TextView t1 = (TextView)findViewById(R.id.textView1);
        //id textView1をt2に当てはめている
        TextView t2 = (TextView)findViewById(R.id.textView2);
        
        //受け取った値を表示
        t1.setText("受け取った数値は"+String.valueOf(getint));
        t2.setText("受け取った文字は"+getstring);
        
        
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	finish();
            }
            });
        }
     

}
SubActivityに画面遷移後に受け取った値を表示させています
device61.png
当然mainにもどるを押すとfinishによりMainActivityに戻ります
スポンサードリンク

posted by kenken at 18:03 | Comment(0) | TrackBack(0) | インテント 画面遷移 | このブログの読者になる | 更新情報をチェックする
2012年03月16日

画面遷移をおこなう(2)


前回はmainとsubのレイアウトとsubActivityをさくせいしました
画面遷移をおこなう(1)
今回はその中身を変更していこうと思います

(2)メインアクティビティとサブアクティビティを編集する
まずはMainActivityからです
やったこととしては
・タイトルの編集
・ボタンの設定
intentの設定
の3つです
ボタンの設定は
ボタンがクリックされるイベントを取得
を参考にしてください
以下MainActivity.javaファイルです
package blog.test;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setTitle("MainActivity");
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	//intentの作成
            	Intent intent = new Intent(MainActivity.this,SubActivity.class);
    			//intentをスタート
            	startActivity(intent);
            }
            });
        }
     
}
ボタンを押したときにintentを作成してスタートさせるようにしています

次にSubActivityの内容です
MainActivityと違う点はタイトルとボタンを押したときに
finish();が実行されてSubActivityが終了するところです
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class SubActivity extends Activity {
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
        setTitle("SubActivity");
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	finish();
            }
            });
        }
     

}


(3)サブアクティビティをアクティビティとして使えるよう登録する
最後に作成したSubActivityをアンドロイドに認識させる
AndroidManifest.xmlにアクティビティを登録する必要があります
プロジェクト内のAndroidManifest.xmlをダブルクリックして開きます
次に下段のタブからアプリケーションを選択します
device57.png

Application Nodesの追加をクリックするとActivityの追加画面が出てきます
Activityを選択しOKを押すとActivityが1つ追加されます
新しく追加されたActivityに先ほど作成したSubActivityを設定するために
右側のName部分の参照をクリックしSubActivityを選択→OKとします
device58.png

これで一通りの設定は完了しました
実行してみるとまずはMainActivityが表示されます
device59.png
ボタンを押すと・・・

SubActivityに移動します
device60.png
SubActivityのボタンを押すと、SubActivityが終了し
MainActivityが再び表示されます
device59.png
スポンサードリンク

posted by kenken at 14:27 | Comment(0) | TrackBack(0) | インテント 画面遷移 | このブログの読者になる | 更新情報をチェックする
2012年03月14日

画面遷移をおこなう(1)


Androidでは基本的には1画面、1Activityになっています
アクティビティ
同一アプリ内で別画面に行きたいとき(画面遷移したいとき)は
Intentを使用し画面遷移していきます
Intentオブジェクトはデータを受け渡したり別のアプリに移動したりと
様々な使い方が可能です

単純な画面遷移の例
画面遷移の方法ですが
(1)メインアクティビティ(移動前)とサブアクティビティ(移動後)を作る
(2)メインアクティビティとサブアクティビティを編集する
(3)サブアクティビティをアクティビティとして使えるよう登録する
となっています


(1)メインアクティビティ(移動前)とサブアクティビティ(移動後)を作る
まずサブアクティビティのレイアウトを作成します
mainレイアウトはサブアクティビティに移動するための
ボタンを一つだけ配置しておきます
ボタンの作成方法は以下を参照してください

ボタンがクリックされるイベントを取得

main.xmlを以下のようにしました
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >


    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="subに移動" />

</LinearLayout>

次にサブレイアウトを作成します
まずresフォルダ→layoutフォルダを右クリックして新規作成を選択します
その中にAndroid XML ファイルというものがあると思うのでそこをクリックします
device54.png
新規 Android XML ファイル作成画面に入ると思います
リソース・タイプとプロジェクトは既に入力されていると思います
(リソース・タイプがLayout、プロジェクトはその作成中のプロジェクト名)
ファイル名には今回sub.xmlを入力し完了を押します
ルート要素や“次へ”で詳細な設定ができますが今回は省きますw

するとmain.xmlと同じようにsub.xmlも作成できるようになります
今回はmainに戻る用のボタンを1つだけ配置しました
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >


    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="mainに戻る" />

</LinearLayout>

レイアウトと同様にsub用のActivity.javaも作成しなければなりません
javaの作成もlayoutとほぼ同様です
src内部のMainActibity.javaが入ってるフォルダを右クリックします
(今回はsrc/blog/test)
新規作成のなかのクラスを選択します
device55.png

新規 Java クラス作成画面が出てくるので
名前にSubActivityと入力し完了をクリックします
device56.png

これでSubActivityもMainActivityと同様に編集することができるようになりました

メインアクティビティとサブアクティビティを編集するに続く 画面遷移を行う(2)
スポンサードリンク

posted by kenken at 14:26 | Comment(0) | TrackBack(0) | インテント 画面遷移 | このブログの読者になる | 更新情報をチェックする