学习导航
第一节 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布局效果都布置到了主布局中造成的,效果如下
怎么解决这个问题呢?其实有两个方法来解决!
第一种: (建议用此方法,简单)
只需要把 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);
}
效果图如下: