Fragment和Activity之间通信

  • Fragment中可以调用getActivity()来获取它所在的Activity。
  • Activity可以调用 FragmentManager的FindFragmentByid()或者FindFragmentByTag()来获取Fragment。

Activity向Fragment发送数据

  • 通过Bundle包装数据,在调用Fragment的setArguments方法发送数据给Fragment。

    String str=text.getText().toString();
    MyFragment5 fragment5=new MyFragment5();
    Bundle bundle=new Bundle();bundle.putString("name",str);
    fragment5.setArguments(bundle);
    FragmentManager   fragmentManager=getFragmentManager();
    FragmentTransaction    transaction=fragmentManager.beginTransaction();
    transaction.add(R.id.ll_layout,fragment5,"Fragment5");
    transaction.commit();
    Toast.makeText(Main5.this,"向fragment发送数据:"+str,Toast.LENGTH_LONG).
    
  • 在Fragment里通过调用getArguments().get()来获取数据。

      String str=getArguments().get("name").toString();
      text.setText(str);
      Toast.makeText(getActivity(),"已接收到:"+str,Toast.LENGTH_LONG).show();
    

Fragment向Activity发送数据

  • 在Fragment中定义一个接口,用于被Activity实现

      public interface MyListener{
              public void thank(String code);
          }
    
  • Fragment中覆写onAttach方法

       @Override
          public void onAttach(Activity activity) {
              myListener= (MyListener) activity;
              super.onAttach(activity);
          }
    
  • Fragment中中调用thank方法

       private MyListener myListener;
          ***********
       myListener.thank(code);
    
  • 在Activity中接口实现方法返回的参数就是接收到的数据

      @Override
      public void thank(String code) {
              Toast.makeText(Main5.this,"已成功接收到"+code+",客气了",Toast.LENGTH_LONG).show();
      }

你可能感兴趣的:(Fragment和Activity之间通信)