画面に値を渡す方法
「putExtra」を用いると変数や配列を渡すことができます。
package test.example.com.test28;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//クリックイベント用に追加
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//座標の初期設定
int x=0;
int y=0;
int width=0;
int height=0;
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
x=100;
y=50;
width=250;
height=80;
Button btn1=new Button(this);
//配置を設定
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
btn1.setText("次の画面を開く");
btn1.setOnClickListener(this);
layout.addView(btn1, obj1);
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
int iData1 = 0;
iData1 = 1;
Integer iData2 = 0;
iData2 = 1000;
int[] arrayInt1 = new int[2];
arrayInt1[0] = 100;
arrayInt1[1] = 200;
ArrayList<Integer> arrayInt2 = new ArrayList<>();
arrayInt2.add(10);
arrayInt2.add(20);
String sData = "";
sData = "aaa";
String[] arrayStr1 = new String[2];
arrayStr1[0] = "a100";
arrayStr1[1] = "a200";
ArrayList<String> arrayStr2 = new ArrayList<>();
arrayStr2.add("a10");
arrayStr2.add("a20");
//次の画面を開く準備をします
Intent intent = new Intent(this, SubActivity.class);
//用意した各データを渡す準備をします
intent.putExtra("int", iData1);
intent.putExtra("Integer", iData2);
intent.putExtra("int[]",arrayInt1);
intent.putExtra("ArrayListInteger", arrayInt2);
intent.putExtra("String", sData);
intent.putExtra("String[]", arrayStr1);
intent.putExtra("ArrayListString", arrayStr2);
//次の画面を開きます
startActivity(intent);
}
//レイアウトを決定するオブジェクトを生成し渡します
private RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
冒頭で記述した通り「putExtra」を用いるとIntentと一緒に画面に指定した値を渡すことができます。
「putExtra」にはキーと値の組み合わせで登録できます。
(例)
intent.putExtra("int", iData1);
intent.putExtra("Integer", iData2);
intent.putExtra("int[]",arrayInt1);
intent.putExtra("ArrayListInteger", arrayInt2);
intent.putExtra("String", sData);
intent.putExtra("String[]", arrayStr1);
intent.putExtra("ArrayListString", arrayStr2);
次の画面
package test.example.com.test28;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class SubActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//前の画面から引き渡されるデータの準備をします
int iData1 = 0;
Integer iData2 = 0;
int[] arrayInt1 = new int[2];
ArrayList<Integer> arrayInt2 = new ArrayList<>();
String sData = "";
String[] arrayStr1 = new String[2];
ArrayList<String> arrayStr2 = new ArrayList<>();
Intent intent = getIntent();
Log.d("start", "------------------------------");
iData1 = intent.getIntExtra("int", 0);
iData2 = intent.getIntExtra("Integer", 0);
arrayInt1 = intent.getIntArrayExtra("int[]");
arrayInt2 = intent.getIntegerArrayListExtra("ArrayListInteger");
sData = intent.getStringExtra("String");
arrayStr1 = intent.getStringArrayExtra("String[]");
arrayStr2 = intent.getStringArrayListExtra("ArrayListString");
Log.d("iData1", String.valueOf(iData1));
Log.d("iData2", String.valueOf(iData2));
for(int i=0; i < arrayInt1.length; i++)Log.d("", String.valueOf(arrayInt1[i]));
for(int i=0; i < arrayInt2.size(); i++)Log.d("", String.valueOf(arrayInt2.get(i)));
Log.d("sData", sData);
for(int i=0; i < arrayStr1.length; i++)Log.d("", arrayStr1[i]);
for(int i=0; i < arrayStr2.size(); i++)Log.d("", arrayStr2.get(i));
Log.d("end", "------------------------------");
//(出力例)
/*
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/start: ------------------------------
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/iData1: 1
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/iData2: 1000
[ 10-19 02:41:07.320 7815: 7815 D/ ]100
[ 10-19 02:41:07.320 7815: 7815 D/ ]200
[ 10-19 02:41:07.320 7815: 7815 D/ ]10
[ 10-19 02:41:07.320 7815: 7815 D/ ]20
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/sData: aaa
[ 10-19 02:41:07.320 7815: 7815 D/ ]a100
[ 10-19 02:41:07.320 7815: 7815 D/ ]a200
[ 10-19 02:41:07.320 7815: 7815 D/ ]a10
[ 10-19 02:41:07.320 7815: 7815 D/ ]a20
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/end: ------------------------------
*/
}
}
|
開いた画面で前の画面から受け取る方法はIntentのgetXXXを用います。
取得する種類によって使用するメソッドが異なりますので、
必要に応じたメソッドを使用してください。
また使用する前にIntentのオブジェクトを生成します。
(例)
Intent intent = getIntent();
(例)
iData1 = intent.getIntExtra("int", 0);
iData2 = intent.getIntExtra("Integer", 0);
arrayInt1 = intent.getIntArrayExtra("int[]");
arrayInt2 = intent.getIntegerArrayListExtra("ArrayListInteger");
sData = intent.getStringExtra("String");
arrayStr1 = intent.getStringArrayExtra("String[]");
arrayStr2 = intent.getStringArrayListExtra("ArrayListString");
実行結果
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/start: ---------------------------------------------
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/iData1: 1
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/iData2: 1000
[ 10-19 02:41:07.320 7815: 7815 D/ ]100
[ 10-19 02:41:07.320 7815: 7815 D/ ]200
[ 10-19 02:41:07.320 7815: 7815 D/ ]10
[ 10-19 02:41:07.320 7815: 7815 D/ ]20
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/sData: aaa
[ 10-19 02:41:07.320 7815: 7815 D/ ]a100
[ 10-19 02:41:07.320 7815: 7815 D/ ]a200
[ 10-19 02:41:07.320 7815: 7815 D/ ]a10
[ 10-19 02:41:07.320 7815: 7815 D/ ]a20
10-19 02:41:07.320 7815-7815/test.example.com.test28 D/end: ---------------------------------------------
左側が起動時のMainActivityで右側が開いた画面のSubActivityとなります。
このサンプルで使用したAndroidManifest.xmlです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.example.com.test28">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity">
<intent-filter>
<action android:name="android.intent.action.SUB" />
</intent-filter>
</activity>
</application>
</manifest>
|
|
|