Androidで画面遷移
アプリ概要
作成手順
■画面遷移の方法
- 呼ばれる側のActivityを新規作成 例)NextActivity
- 作成したActivityで使うlayoutファイルを作成 例)next.xml
- layoutファイルはresフォルダ以下のlayoutフォルダ内に作成する
- AndroidManifestファイルを修正する
- <修正内容>
- applicationタグ内にactivityタグを追加する。
- android:name属性に?で作成したActivityを指定する
例) <activity android:name=".NextActivity" android:label="@string/app_name"> </activity>
- プロジェクト作成時にデフォルトで作成されているActivityを修正する
- 画面遷移をするにはIntentを使う
- Intentオブジェクトを生成する
- intent = new Intent(呼び出し元Activity, 呼び出したいActivity);
- 呼び出すにはIntent#startActivityを使う
例 Intent intent = new Intent(MainActivity.this, NextActivity.class); startActivity(intent);
- 遷移先として作成したActivityを修正する。
- setContentViewで遷移先レイアウトとして作成したxmlを指定する
例)setContentView(R.layout.next);
■Intentを使ってデータを受け渡しする
呼び出し先にデータを渡したいときはIntentを使う
- Intentに値を持たせる
- IntentクラスのputExtraメソッドを使用する
- Intent#putExtra(任意のキー値, 持たせたいデータ);
例) intent.putExtra("data", "sampledata");
- Intentから値を取り出す
- Intentオブジェクトを取得する
- getIntentメソッドを使ってIntentを取得する
- データを取得する
- Intent#getStringExtraメソッドを使う
- Intentオブジェクトを取得する
例)
Intent intent = getIntent();
String data = intent.getStringExtra("data");
ソース
■MainActivity
package com.example; 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; import android.widget.EditText; public class MainActivity extends Activity { private Button btSend; private EditText editSendata; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.btSend = (Button)findViewById(R.id.ButtonSend); this.editSendata = (EditText)findViewById(R.id.EditSendData); //ボタンクリック時の処理を実装する this.btSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Intentをつかって画面遷移する Intent intent = new Intent(MainActivity.this, NextActivity.class); intent.putExtra("data", editSendata.getText().toString()); startActivity(intent); } }); } }
■NextActivity
package com.example; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class NextActivity extends Activity { private TextView txtResultData; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.next); this.txtResultData = (TextView)findViewById(R.id.Result); //Intentを取得する Intent intent = getIntent(); //Intentに保存されたデータを取り出す String data = intent.getStringExtra("data"); this.txtResultData.setText(data); } }
■main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:layout_height="wrap_content" android:text="SendData" android:id="@+id/EditSendData" android:layout_width="fill_parent"> </EditText> <Button android:layout_height="wrap_content" android:text="Send" android:id="@+id/ButtonSend" android:layout_width="fill_parent"> </Button> </LinearLayout>
■next.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Result" android:id="@+id/Result"> </TextView> </LinearLayout>
■AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NextActivity" android:label="@string/app_name"> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>