Kuwapp's Blog

Android と Flutter やってます

【Android】Fragmentにオブジェクトを渡す

FragmentにStringやintを渡すだけなら
下記のようにBundleにセットするだけで簡単にできます。

Bundle bundle = new Bundle();
bundle.putString("Name", "nanasi_san");
bundle.putInt("Age", 21);

Fragment fragment = new Fragment();
fragment.setArguments(bundle);

//onCreateView内
Bundle bundle = getArguments();
String name = bundle.getString("Name");
int age = bundle.getInt("Age"); 

ここでは名前と年齢の情報を渡していますが
次のようにPersonクラスのオブジェクトとしてまとめてそれを渡したいですよね。

public class Person{

	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


その方法ですが、
まず、PersonクラスにSerializableインターフェースを実装します。

public class Person implements Serializable{
        //略...
}

あとはPersonクラスをputSerializableでBundleにセットして渡すだけです。

Person person = new Person();
person.setName("nanasi_san");
person.setAge(21);
        
Bundle bundle = new Bundle();
bundle.putSerializable("PERSON", person);
        
Fragment fragment = new Fragment();
fragment.setArguments(bundle);

//取り出し onCreateView内で
Bundle bundle = getArguments();
Person person = (Person)bundle.getSerializable("PERSON");
Log.d("NAME",person.getName());
Log.d("AGE",String.valueOf(person.getAge()));

まとめ

・渡したいクラスでSerializableインターフェースを実装する
・putSerializableでBundleにセットする