zoukankan      html  css  js  c++  java
  • Fragment与Activity通信

    Fragment与Activity的通信

    Fragment通常作为Activity的子组件,可以自由地从Activity添加和删除,可以被多个Activity共享。

    首先来看Activity如何管理Fragment组件:

    • 添加Fragment

      添加Fragment有两种方式:
      (1) 在layout文件中通过< fragment >标签声明Fragment

      <?xml version="1.0" encoding="utf-8"?> 
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      <fragment android:name="com.example.MyListFragment"
              android:id="@+id/list"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      </LinearLayout> 

      (2) 通过FragmentManager动态添加

      Fragment fragment = new MyListFragment();
      FragmentManager  fragManager = getFragmentManager();
      FragmentTransaction fragTransaction = fragManager.beginTransaction();
      fragTransaction.add(R.id.fragment_container,fragment);
      fragTransaction.commit();
       
    • 移除Fragment

      移除Fragment也是通过FragmentManager,包括remove方法和replace方法。remove直接将Fragment从Activity中移走,而replace方法移除Fragment后还使用另一个Fragment替代。

      FragmentManager  fragManager = getFragmentManager();
      FragmentTransaction fragTransaction = fragManager.beginTransaction();
      fragTransaction.remove(fragment);
      // fragTransaction.replace(R.id.fragment_container,newFragment);
      fragTransaction.commit();
       

    使用FragmentManager可以对Fragment进行管理,包括add、remove、replace等,FragmentTransaction表示对Fragment的一次管理事务,commit之后才会生效。在commit操作之前可以调用addToBackStack将该FragmentTransaction压入transaction栈内,后面用户可以通过Back键回滚到执行该FragmentTransaction之前的状态。



    Fragment添加到Activity之后如何与Activity进行通信呢?

    • 在Fragment中可以通过getActivity()获取所属的Activity对象

    • 在Activity中可以通过FragmentManager的findFragmentById、findFragmentByTag获取指定Fragment对象 
    • Fragment之间可以通过Activity共享事件消息
      Fragment可以向Activity传递事件消息,也可以通过Activity向其他Fragment传递事件消息。通常在Fragment类中定义callback 接口,然后其所属Activity实现该接口。

      public class MyListFragment extends ListFragment {
      
      private OnArticleSelectedListener mListener;    
      
      // Container Activity must implement this interface
      public interface OnArticleSelectedListener {
          public void onArticleSelected(Uri articleUri);
      }
      
      
      public void onAttach(Activity activity) {
          super.onAttach(activity);
          mListener = (OnArticleSelectedListener) activity;
      }
      }
     
  • 相关阅读:
    TCP之Nagle算法与TCP_NODELAY
    CSPS模拟 87
    CSPS模拟 86
    CSPS模拟 85
    CSPS模拟 84
    CSPS模拟 83
    CSPS模拟 82
    CSPS模拟 81
    CSPS模拟 80
    CSPS模拟 79
  • 原文地址:https://www.cnblogs.com/jqctop1/p/5458553.html
Copyright © 2011-2022 走看看