fragment简单使用

来源:互联网 发布:可靠性分析软件下载 编辑:程序博客网 时间:2024/06/06 18:04

学习导航

第一节 fragment基础知识学习 :http://blog.csdn.net/bobo8945510/article/details/52788994

第三节 fragment的增删改学习 :http://blog.csdn.net/bobo8945510/article/details/52806916

第四节 fragment+viewpager:http://blog.csdn.net/bobo8945510/article/details/52821741


Fragment学习——fragment简单实现

实现一个简单的例子,流程如下:

一、添加两个类继承Fragment,并且为对应的fragment创建对应的xml布局。fragment01代码如下:

import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by ENZ on 2016/10/11. */public class Fragment01 extends Fragment{    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        //引用创建好的xml布局        View view = inflater.inflate(R.layout.fragment01,container,false);        return view;    }}
  • 他对应的布局
<?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"    >    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:textSize="50dp"        android:text="我是第一页">    </TextView></LinearLayout>
  • 布局效果:
    -

二、那如何添加到activity中呢?看下面代码,我注释的很清楚。

import android.app.Activity;import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {    private Button button01,button02;    private Fragment fragment01;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        setview();    }    private void setview() {        button01 = (Button)findViewById(R.id.button01);        button01.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //获取到FragmentManager,在V4包中通过getSupportFragmentManager,                //在系统中原生的Fragment是通过getFragmentManager获得的。                FragmentManager FM = getFragmentManager();                //2.开启一个事务,通过调用beginTransaction方法开启。                FragmentTransaction MfragmentTransaction =FM.beginTransaction();                //把自己创建好的fragment创建一个对象                Fragment01  f1 = new Fragment01();                //向容器内加入Fragment,一般使用add或者replace方法实现,需要传入容器的id和Fragment的实例。                MfragmentTransaction.add(R.id.fragment_buju,f1);                //提交事务,调用commit方法提交。                MfragmentTransaction.commit();            }        });        button02 = (Button)findViewById(R.id.button02);        button02.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //获取到FragmentManager,在V4包中通过getSupportFragmentManager,                //在系统中原生的Fragment是通过getFragmentManager获得的。                FragmentManager FMs = getFragmentManager();                //2.开启一个事务,通过调用beginTransaction方法开启。                FragmentTransaction MfragmentTransactions = FMs.beginTransaction();                //把自己创建好的fragment创建一个对象                Fragment02 f2 = new Fragment02();                //向容器内加入Fragment,一般使用add或者replace方法实现,需要传入容器的id和Fragment的实例。                MfragmentTransactions.add(R.id.fragment_buju,f2);                //提交事务,调用commit方法提交。                MfragmentTransactions.commit();            }        });    }}

上面代码中用到了几个重要的知识点,我在上一篇博客有讲到

  • 其实就用到了下面的几行代码,就可以把一个fragment添加到Activity中。
FragmentManager FMs = getFragmentManager();FragmentTransaction MfragmentTransactions = FMs.beginTransaction();Fragment02 f2 = new Fragment02();MfragmentTransactions.add(R.id.fragment_buju,f2);MfragmentTransactions.commit();

1、首先你需要了解getFragmentManager()是获取的什么,他的意思是什么?

2、通过获得的FMS对象,开启一个beginTransaction()事务,但是FragmentTransaction什么含义呢?

3、MfragmentTransactions.add()方法,添加fragment对象。

4、commit()方法的意思是什么?

5、请先了解fragment初识篇章:http://blog.csdn.net/bobo8945510/article/details/52788994

注意:很多初学者到这一步就会遇到一个问题,就是下面这样,添加两个fragment,造成了重叠,原因就是,两个fragment布局效果都布置到了主布局中造成的,效果如下

这里写图片描述

怎么解决这个问题呢?其实有两个方法来解决!


第一种: (建议用此方法,简单)

只需要把 add()方法改为replace()即可,他的意思就是如果主布局已经被某个fragment使用过了,再有新的fragment布局,就会把老的fragment布局替换掉。

这里写图片描述


第二种:

判断主布局是否被使用,在添加fragment时下面代码

 if(FMs.findFragmentById(R.id.fragment_buju)==null){        //如果没有使用过        MfragmentTransactions.add(R.id.fragment_buju,f2);  }else {       //如果有使用过,就把老的fragment替换掉。        MfragmentTransactions.replace(R.id.fragment_buju,f2);  }

效果图如下:
这里写图片描述


demo地址,http://download.csdn.net/detail/bobo8945510/9651004

代码中我使用的是第二种方法,建议用第一种!

1 0