Activity向Fragment传递数据
第一种方式:
1.1 可在需要传递的Fragment
中定义一个getInstance
(传递的数据参数)方法来传递数据,同时可在onCreateView
方法中获取传递过来的值。
static MyFragment getInstance(String str) {
MyFragment mFragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("data", str);
mFragment.setArguments(bundle);
return mFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_fragment, container, false);
if (isAdded()) {// 判断Fragment已经依附Activity
Bundle bundle = getArguments();
data = bundle.getString("data");
}
tvFm = (TextView) view.findViewById(R.id.tvFm);
if (data != null) {
tvFm.setText(data);
}
return view;
}
1.2 在宿主Activity
中创建Fragment
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment fragment = MyFragment.getInstance("key");
第二种方式:
2.1 在宿主Activity
中定义传值的方法
public String getTitle() {
return "xxx";
}
2.2 在Fragment
中的onAttach
方法中获取到这个值
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 通过强转成宿主Activity就可以获取到传递过来的数据
title = ((MainActivity) activity).getTitle();
}
Fragment向Activity传递数据
1 在Fragment
中定义一个回调接口
2 在Activity
中实现这个回调接口
3 在Fragment
的onAttach
方法中获得Activity
中实现好的实例化接口对象
4 利用接口的对象进行传值
Fragment示例代码:
public class MyFragment extends Fragment {
private Button btnValue;
// 定义用来与外部Activity交互,获取到宿主Activity
private CallBackValue callBackValue;
// 定义了Activity必须实现的接口方法
public interface CallBackValue {
void SendMessageValue(String value);
}
// 当Fragment被加载到Activity的时候会被回调
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof CallBackValue) {
callBackValue = (CallBackValue) getActivity(); // 获取到宿主Activity并赋值
} else {
throw new IllegalArgumentException("activity must implements CallBackValue");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_fragment, container, false);
btnValue = (Button) view.findViewById(R.id.btnValue);
btnValue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callBackValue.SendMessageValue("xxx");
}
});
return view;
}
// 将传递进来的Activity对象释放掉
@Override
public void onDetach() {
super.onDetach();
callBackValue = null;
}
}
Activity示例代码:
public class MyFragment extends Activity implements CallBackValue {
private TextView tvValue;
private CallBackValue callBackValue;
@Override
public void SendMessageValue(String value) {
tvValue.setText(value);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvValue = (TextView) findViewById(R.id.tvValue);
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment fragment = MyFragment.getInstance("key");
}
}