一、Activity 向 Fragment 传递数据
方法一、通过 setArguments() 方法
适用于 Activity 和 Fragment 在同一级目录下
- 在 Activity 中实例化Fragment对象,通过Fragment.setArguments(Bundle) 传递信息
Bundle bundle = new Bundle();
bundle.putString("key",value);
Fragment fragment = new Fragment();
fragment.setArguments(bundle);
- 在 Fragment 中通过 getArguments() 方法获得 Bundle 对象
Bundle bundle = getArguments();
String value = bundle.getString("key");
方法二、通过 Fragment 的 onAttach(Context context) 方法
适用于 Activity 和 Fragment 不在同一级目录下
- 在 Activity 中定义 getData() 的公共方法,返回希望传送的数据的类型。
private String str = "1234";
public String getData(){
return str;
}
- 在 Fragment 的 onAttach(Context context) 方法中通过 ((MainActivity) context) 类型转换,获得 MainActivity 的上下文对象,再通过上面定义的共有方法获得数据。
private String str = null;
@Override
public void onAttach(Context context) {
super.onAttach(context);
str = ((MainActivity) context).getData();
}
二、Fragment 向 Activity 传递数据
- 在 Fragment 中定义一个接口 MessageSend ,并定义方法 sendMessage
public interface MessageSend {
void sendMessage(String data);
}
- 定义 MessageSend 对象,并在 Fragment 的 onAttach() 方法中初始化接口(当然也可以在onCreate 或 onCreateView 等方法中初始化接口,只要在传送数据之前初始化就可以)
private MessageSend messageSend;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
messageSend = (messageSend)context;
}catch (ClassCastException e){
throw new ClassCastException();
}
}
- 在 Fragment 中设置需要传送的数据
String data = "12345678";
messageSend.sendMessage(data);
- 在 Activity 中实现回调接口,即可获取数据
public class MainActivity extends AppCompatActivity implements Fragment.messageSend {
··· ···
@Override
public void sendMessage(String data) {
String value = data;
}
}