Fragment向Activity传参
用接口回调的方法:
(一)在Fragment中
1、先定义接口
public interface OnFragmentInteractionListener {
public void onButtonClickListener(String msg);
}
2、声明接口
private OnFragmentInteractionListener mListener;
3、重写Fragment的onAttach(Activity)方法,在这里面给接口注册赋值
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) activity;
} else {
throw new RuntimeException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
4、在要传参的地方调用接口方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_message_one, container, false);
final TextView textView = (TextView) view.findViewById(R.id.message_fragment_one);
Button button = (Button) view.findViewById(R.id.fragment_one_send_btn);
textView.setText(mParam1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = textView.getText().toString();
Log.i("info","mListener = "+mListener);
if (mListener != null) {
mListener.onButtonClickListener(msg);
}
}
});
5、最后重写onDetach()方法,把接口实例赋为空
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
(二)在Activity中
1、先实现上述接口
extends AppCompatActivity implements MessageOneFragment.OnFragmentInteractionListener
2、在重写的方法中写上传过来的参数的处理事件
@Override
public void onButtonClickListener(String msg) {
mTextView.setText(msg);
getFragmentManager().beginTransaction().replace(R.id.argumentactivity_msg_fragment_two,MessageTwoFragment.newInstance(msg)).commit();
}
Activity向Fragment传参
(一)在Fragment中
1、先封装一个方法newInstance(String)
private static final String ARG_PARAM1 = "param1";
private String mParam1;
public static MessageOneFragment newInstance(String param1) {
MessageOneFragment fragment = new MessageOneFragment();//在这里面实例化此Fragment类
Bundle args = new Bundle();//把传过来的参数放在Bundle里
args.putString(ARG_PARAM1, param1);
fragment.setArguments(args);//把Bundle放入Fragment对象
return fragment;
}
2、重写Fragment的onCreate()方法,在这里把参数赋给全局变量
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
}
}
3、在需要的地方处理参数
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_message_one, container, false);
TextView textView = (TextView) view.findViewById(R.id.message_fragment_one);
textView.setText(mParam1);
return view;
}
(二)在Activity中
String param = mEditText.getText().toString();
getFragmentManager().beginTransaction().replace(R.id.argumentactivity_msg_fragment_one,MessageOneFragment.newInstance(param)).commit();