天天看点

Fragment和Activity之间的传参

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();
           

继续阅读