加载Fragment

1.静态加载Fragment

静态加载的基本思路是:从MainActivity启动SecondActivity,在SecondActivity的布局中有一个<fragment>标签,此标签依附于我们自己写的一个类MyFragment,MyFragment类继承自Fragment,并重写了它的View onCreateView方法,此方法返回一个匹配好的view对象,而此方法中的inflater.inflate(R.layout.fragment, container,false);匹配了我们想要fragment呈现的布局,这里只有一个textView控件。
MainActivity布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/btn1"
        android:text="静态加载Fragment"
        />
         <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/btn2"
        android:text="动态加载Fragment"
        />
    </LinearLayout>
    <LinearLayout 
        android:id="@+id/frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        ></LinearLayout>
</LinearLayout>

MainActivity.java:

public class MainActivity extends Activity implements OnClickListener{

    private Button btn1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.btn1:
            Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
            startActivity(intent);
            break;
        }
    }
}

SecondActivity.java:

public class SecondActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
}

activity_second.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment 
        android:id="@+id/fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name = "jimo.fragment.MyFragment"
        ></fragment>
</LinearLayout>

MyFragment.java:

public class MyFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /**
         * 参数解释:
         * resource:Fragment需要加载的布局文件
         * root:加载layout的父ViewGroup
         * attactToRoot:false,不返回父ViewGroup
         */
        View view = inflater.inflate(R.layout.fragment, container,false);//layout布局文件转换成View对象
        TextView txt = (TextView)view.findViewById(R.id.txt);//注意,这里要用view.findViewById
        txt.setText("静态加载Fragment");
        return view;
    }
}

fragment.xml:

<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="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txt"
        />
</LinearLayout>

运行结果:
1
点击第一个按钮:
2

2.动态加载Fragment:

动态加载的基本思路是:直接在MainActivity的布局里(也就是主界面)加载fragment的布局,可以看到在activity_main里后面有一个LinearLayout布局,里面什么也没写,现在我们就要在点击第二个按钮时动态的把fragment.xml里的布局加入其中。
具体实现:
1.再次写一个Fragment的子类DDFragment(Dynamic Load Fragment),内容和静态时一样。
2.修改btn2的点击事件,采用事务的方式加载布局,和数据库的事务差不多。ft.add(R.id.frame, ddf);这句代码我想是可以理解的,就是把ddf对应的fragment加入到id为frame的LinearLayout布局中。
最后别忘了提交

DDFragment.java

public class DDFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container,false);
        TextView txt = (TextView) view.findViewById(R.id.txt);
        txt.setText("动态加载Fragment");
        return view;
    }
}

btn2点击事件:

case R.id.btn2:
            DDFragment ddf = new DDFragment();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.add(R.id.frame, ddf);
            ft.commit();
            break;
            default:break;

运行结果:
开始:
3
点击第二个按钮:
4

3.总结:

看起来静态加载和直接跳转没什么区别
动态加载用的是很多的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值