您的位置:首页 > 移动开发 > Android开发

FragmentActivity、FragmentManager、FragmentTransaction几个的关系

2017-03-08 19:35 357 查看
FragmentActivity提供这么一个方法

//
Return the FragmentManager for interacting with fragments associated with this activity.

public FragmentManager getSupportFragmentManager()
也就是说用于Activity与Fragment之间的联系交流

FragmentManager提供这么几个方法

abstract FragmentTransactionbeginTransaction()
Start a series of edit operations on the Fragments associated with this FragmentManager.
     可以通过定义一个 FragmentTransaction transaction = manager.beginTransaction();
abstract FragmentfindFragmentById(int
id)
Finds a fragment that was identified by the given id either when inflated from XML or as the container ID when added in a transaction.
abstract FragmentfindFragmentByTag(String tag)
Finds a fragment that was identified by the given tag either when inflated from XML or as supplied when added in a transaction.
也就是说可以通过id,或者tag的查找方法去找到对应的Fragment,例如下面用法

messageFragment = (MessageFragment)fragmentManager.findFragmentByTag("message");
callFragment = (CallFragment)fragmentManager.findFragmentByTag("call");

Tranction的使用
abstract FragmentTransactionreplace(int
containerViewId, Fragment fragment, String tag)
Replace an existing fragment that was added to a container.
abstract FragmentTransactionreplace(int
containerViewId, Fragment fragment)
Calls 
replace(int,
Fragment, String)
 with a null tag.
这个方法是将Fragment替换
abstract intcommit()
Schedules a commit of this transaction.
abstract intcommitAllowingStateLoss()
Like 
commit()
 but
allows the commit to be executed after an activity's state is saved.
详细解析如下


public abstract int commit ()

Schedules a commit of this transaction. The commit does not happen immediately; it will be scheduled as work on the main thread to be done the next time that thread is ready.

A transaction can only be committed with this method prior to its containing activity saving its state. If the commit is attempted after that point, an exception will be thrown. This is because the state after the commit can be lost if the activity needs to
be restored from its state. See 
commitAllowingStateLoss()
 for
situations where it may be okay to lose the commit.

Returns
Returns the identifier of this transaction's back stack entry, if 
addToBackStack(String)
 had
been called. Otherwise, returns a negative number.


public abstract int commitAllowingStateLoss ()

Like 
commit()
 but
allows the commit to be executed after an activity's state is saved. This is dangerous because the commit can be lost if the activity needs to later be restored from its state, so this should only be used for cases where it is okay for the UI state to change
unexpectedly on the user.
按我的理解相当于用于提交

主要常见的有这几种用法,具体实现查看E盘-AndroidProject-FragmentConvert

所以 完整地加载一个fragment需要如下
FragmentManager fragmentManager = getSupportFragmentManager();//获得Manager
FragmentTransaction transaction = fragmentManager.beginT
b743
ransaction();//获得事务
        callFragment = new CallFragment();//创建一个自定义Fragment
        transaction.add(R.id.fl_content, callFragment, "zhishi");//加进去事务
        transaction.show(callFragment);//显示该fragment
        transaction.hide(messageFragment);//隐藏另一个fragment

在Layout的代码如下
主视图

<FrameLayout
    android:id="@+id/fl_content"
    android:layout_width="fill_parent"
   
android:layout_height="fill_parent" />                        
另外还需要自己定义xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="这是电话界面"/>

</LinearLayout>

自定义的CallFragment

public class CallFragment extends Fragment {

   @Override
   public View onCreateView(LayoutInflater inflater,
          ViewGroup container, Bundle savedInstanceState) {

      return inflater.inflate(R.layout.fragment_call, null);
   }

}

主要常见的有这几种用法,具体实现查看E盘-AndroidProject-FragmentConvert
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android fragment