Androidアプリ入門 No.64 Intent アクションでデータを受け取る オブジェクトの受け渡し
アクションでデータを受け取る
オブジェクトの受け渡し
明示的なIntentでオブジェクトを受け渡すときにはSerializableを実装したオブジェクトを受け渡すことができる。その受け渡しの例を確認する。IntentTest2を変更して動作を確認する。まず、実際にデータを受け渡すSerializableを実装したクラスを作成する。単純にintとStringのデータを保持するクラスである。
package sample.dto; import java.io.Serializable; public class TestDto implements Serializable { private static final long serialVersionUID = 1L; private int intData; private String stringData; public int getIntData() { return intData; } public void setIntData(int intData) { this.intData = intData; } public String getStringData() { return stringData; } public void setStringData(String stringData) { this.stringData = stringData; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("intData=").append(intData); sb.append(" stringData=").append(stringData); return sb.toString(); } }
呼び出されるActivityのレイアウトmain2.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:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
受け渡されるクラスの実装はSubActivity.javaとし、以下のようにする。getSrializableしたオブジェクトをTestDtoにキャストして、その内容をTextViewに表示する。
package sample.it2; import sample.dto.TestDto; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class SubActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); TextView textView = (TextView) findViewById(R.id.textView); TestDto testDto = (TestDto) getIntent().getExtras().getSerializable("testDto"); textView.setText(testDto.toString()); } }
次に、SubActivityを呼び出す側のmain.xmlを以下のようにしてボタンを1つ増やす。
<?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:id="@+id/urlEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="http://www.google.co.jp" /> <Button android:id="@+id/browserButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ブラウザ表示" /> <Button android:id="@+id/serializableButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="オブジェクト受け渡し" /> </LinearLayout>
SubActivityを呼び出す、MainActivity.javaを以下のようにする。TestDtoにデータを入れて、putExtraでデータを渡しているだけである。
package sample.it2; import sample.dto.TestDto; import android.app.Activity; import android.content.Intent; import android.net.Uri; 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 EditText urlEditText; private Button browserButton; private Button serializableButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); urlEditText = (EditText) findViewById(R.id.urlEditText); browserButton = (Button) findViewById(R.id.browserButton); serializableButton = (Button) findViewById(R.id.serializableButton); browserButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("net.kuwalab.web"); intent.setData(Uri.parse(urlEditText.getText().toString())); startActivity(intent); } }); serializableButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), SubActivity.class); intent.setAction(Intent.ACTION_VIEW); TestDto testDto = new TestDto(); testDto.setIntData(100); testDto.setStringData(urlEditText.getText().toString()); intent.putExtra("testDto", testDto); startActivity(intent); } }); } }
最後に、明示的なAcitvity呼び出しであるためAndroidManifest.xmlを以下のようにする。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="sample.it2" 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=".SubActivity"> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>