天天看点

fragment简单使用

学习导航

第一节 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>
           
  • 布局效果:
    fragment简单使用

二、那如何添加到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布局效果都布置到了主布局中造成的,效果如下

fragment简单使用

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

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

只需要把 add()方法改为replace()即可,他的意思就是如果主布局已经被某个fragment使用过了,再有新的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);
  }
           

效果图如下:

fragment简单使用

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

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