Fragment(11)FragmentTransaction的 add 注意事项

函数:

  public abstract FragmentTransaction add(int containerViewId, Fragment fragment);

getFragmentManager().beginTransaction().add(R.id.frgmt_top, new TopFrgmt()).commit()

作用:

  add 是把一个fragment添加到一个容器 container 里。并且显示container的内容+fragment对应的view的内容.

   

注意:

  R.id.frgmt_top必需在执行add时所在的layout中.

示例1:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MActivity"
    tools:ignore="MergeRootFrame" >
</FrameLayout>
public class MActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new MainFrgmt()).commit();
        }
    }
}

R.id.container必需在 R.layout.activity_main 中

示例2:

frgmt_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    ... >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
       ...
    </LinearLayout>
    <LinearLayout
        android:id="@+id/frgmt_top"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="18dp"
        android:gravity="center_horizontal"
        android:background="#ff09a23d"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="top" />
    </LinearLayout>
</LinearLayout>

MainFrgmt.java中

public class MainFrgmt extends Fragment implements OnClickListener {
    private LinearLayout top, center, bottom;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.frgmt_main, container, false);
     ...return rootView;
    }
    @Override
    public void onClick(View v) {
        FragmentManager fmgr = getFragmentManager();
        FragmentTransaction ft = fmgr.beginTransaction();
        switch (v.getId()) {
        case R.id.tog_top:
            if (tog_top.isChecked()) {
                ft.add(R.id.frgmt_top, new TopFrgmt());
            } else {
                Fragment frmg = fmgr.findFragmentById(R.id.frgmt_top);
                ft.remove(frmg);
            }
            break;  //...
R.id.frgmt_top必需在frgmt_main.xml中
时间: 2024-12-09 17:59:54

Fragment(11)FragmentTransaction的 add 注意事项的相关文章

FragmentTransaction的add(),replace(),以及show(),hide()

最近在做一个Android的电商App,之前一直使用FragmentTransaction的add(),hide()和show()来控制主页的显示与隐藏.最近发现一个问题,因为show()和hide() 来控制显示隐藏的话是不走Fragment的onResume方法的,而如果使用replace()的话就是全部Fragment都走onResume()方法.这就无法满足我一部分Fragment点击刷新而另一部分不刷新的要求.最后发现,通过定义两个FragmentManager和FragmentTra

Fragment(10)FragmentTransaction.add(id,Fragment)报错: No view found for id 0x****** for fragment

1.错误信息: 06-26 22:54:28.509: E/AndroidRuntime(20363): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exe.custommenu/com.exe.custommenu.MainActivity}: java.lang.IllegalArgumentException: No view found for id 0xaabbcc for fragmen

Fragment(12)FragmentTransaction add() hide() detach() show()

转自:  http://my.oschina.net/u/614511/blog/70736 使用add()加入fragment时将触发onAttach(),使用attach()不会触发onAttach() 使用replace()替换后会将之前的fragment的view从viewtree中删除 触发顺序: detach()->onPause()->onStop()->onDestroyView() attach()->onCreateView()->onActivityCr

Fragment,FragmentManager, FragmentTransaction详解

Fragment是3.0引入的新组件,在3.0之前需要引入v4包的Fragment进行向下兼容,在项目中会频繁用到. 先说下3.0的Fragment用法. 其中,Fragment的生命周期就不多说了,首先构建Fragment 的View对象. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-gener

Fragment加载替换add,show,hide,replace方法

使用replace方法把原有的Fragment替换掉: 使用hide和show方法,把已经添加过的Fragment再次显示出来. 使用replace(R.id.layout,B)即可以.但是这带来一个问题,原来A会在被replace后被销毁,会调用其生命周期函数(onDestoryView(),onPause(),onDestory()). 如果频繁地replace Fragment会不断创建新实例,销毁旧的,无法重用. 多次切换,会导致Fragment上的View无法加载的问题(onCreat

android FragmentTransaction.replace的用法介绍

创建Fragment Fragment和Activity有很多相似之处,例如可以不带UI,但这样做对两者似乎都没什么意义.他们的创建方式也很相似,例如下面的代码: [html] view plaincopyprint? package test.fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View;

Fragment onCreateView inflate注意事项

用Fragment很久了,今天忽然发现自己写的东西,明明子Fragment是全屏,但是宽度只有那么一点点.其实这个问题的本质是inflate的方法的使用,之前也研究过但么有留下记录,在fragment使用上又暴漏出来了.直觉告诉我一定是哪块出问题了,很快锁定到onCreateView上. 在onCreateView里我们一般有两种写法,方法1: @Override public View onCreateView(LayoutInflater inflater, ViewGroup contai

Fragment用app包还是v4包解析

转自:http://blog.csdn.net/zc0908/article/details/50721553 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了... 到底是用Android.app下的Fragment还是用的android.support.v4.app包下的Fragment? 答:其实都可以,没错,都可以!!!我们都知道Fragment是3.0(API 11)后引入的 那么如果开发的app需要在3.0以下的版本运行呢?比如还有一点点市场份

Android做法说明(3)---Fragment使用app袋或v4包解析

Android做法说明(3)---Fragment使用app袋或v4包解析 1)问题简述 相信非常多的朋友在调用Fragment都会遇到以下的情况: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 这个时候问题来了... 究竟是用android.app下的Fragmen