Android之静态和动态加载Fragment

摘要:
二、通过一个例子来理解:说明下下面的图:第一个为主界面,通过两个按钮来分别实现静态和动态效果静态实现:定义一个fragment_layout布局文件作为静态添加的对象:˂?

一、fragment的静态加载和动态加载的理解:

我觉得可以把fragment当做为一个自定义的布局,然后去使用这个定义好的布局,对于静态和动态的理解是,静态是讲在主布局文件中放入fragment布局,然后使用,而动态是不需要在主布局文件中去声明fragment的,而是直接在java代码中去添加。

二、通过一个例子来理解:

说明下下面的图:第一个为主界面,通过两个按钮来分别实现静态和动态效果

Android之静态和动态加载Fragment第1张Android之静态和动态加载Fragment第2张Android之静态和动态加载Fragment第3张

静态实现:

定义一个fragment_layout布局文件作为静态添加的对象:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:background="#aabbcc"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:textSize="30sp"
android:text="这是静态加载的fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

定义一个MyFragment类,继承Fragment:

public class MyFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//定义一个view对象,并返回
//第一个参数为上面定义的布局文件,第二参数为传入的参数,第三个参数一般设为false
View view=inflater.inflate(R.layout.fragment_layout,container,false);
return view;
}
}

创建一个主布局文件activity_main2中放入fragment:(注意这里添加的Fragment要加入name属性)

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

<fragment
android:id="@+id/myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="base.learnfragment.MyFragment"/>

</LinearLayout>

然后再创建一个ActivityMain2加载第二个活动的主布局:

public class ActivityMain2 extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
}

至此,一个静态的fragment就实现 了。

下面我们来补充第一个活动的主布局activity_main:(注意这里要加入一个id:container(可以自己定义))

<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"
android:id="@+id/container"
tools:context="base.learnfragment.MainActivity">

<Button
android:text="静态加载fragment"
android:id="@+id/btn_static"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<Button
android:text="动态加载fragment"
android:id="@+id/btn_dongtai"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

定义第二个类MyFragment2,以及布局文件fragment_layout2:

public class MyFragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_layout2,container,false);
return view;
}
}
<LinearLayout
android:background="#ff0000"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:textSize="30sp"
android:text="这是动态加载的fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>

补充MainActivity:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_static).setOnClickListener(this);
findViewById(R.id.btn_dongtai).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_static:
//跳转到第二个活动,使第二活动完成静态加载fragment
startActivity(new Intent(MainActivity.this,ActivityMain2.class));

break;
case R.id.btn_dongtai:
//声明我们自定义的fragment
MyFragment2 fragment2=new MyFragment2();

//动态添加到布局中,注意replace中的第一个参数为activity_main中的id
getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment2).commit();

break;
}
}
}

这样动态添加也完成了。

总结一下:

1.注意每一个fragment的布局都要有一个与之对应的继承于Fragment的类。

2.关于继承.app.Fragment和.support.v4.app.Fragment的问题:

如果要使用前者,那么MainActivity继承Activity即可,然后动态添加时,是getFragmetManager();

如果使用后者,那么MainActivity要继承FragActivty,然后动态添加时,是getSupportFragmentManager();

免责声明:文章转载自《Android之静态和动态加载Fragment》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Json Schema简介etcd查看leader节点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

安卓Design包之CoordinatorLayout配合AppBarLayout,ToolBar,TabLaout的使用

转载:  CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用控件的简单介绍: AppBarLayout:它是继承LinerLayout实现的一个ViewGroup容器组件,是为了Material Design而设计的App Bar,支持手势滑动操作。 默认的AppBarLayout是垂直方向的,它的作用...

【转】Android Drawable Resource学习(十一)、RotateDrawable

对另一个drawable资源,基于当前的level,进行旋转的drawable。 文件位置: res/drawable/filename.xml文件名即资源名 编译数据类型: 指向 RotateDrawable的指针。 资源引用: In Java: R.drawable.filenameIn XML: @[package:]drawable/filen...

为什么Android手机总是越用越慢?

根据第三方的调研数据显示,有77%的Android手机用户承认自己曾遭遇过手机变慢的影响,百度搜索“Android+卡慢”,也有超过460万条结果。在业内,Android手机一直有着“越用越慢”的口碑,这个现象甚至超出了硬件范畴——很多中高端Android手机在硬件参数上都优于同一代iPhone,但是它们仍然会在使用半年到一年的时间后进入“欠流畅”的状态—...

LinearLayout布局

布局代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layou...

RecyclerView下拉刷新和上拉加载更多实现

RecyclerView下拉刷新和上拉加载更多实现 转 https://www.jianshu.com/p/4ea7c2d95ecf   在Android开发中,RecyclerView算是使用频率非常广泛的组件了吧,在这里对RecyclerView比较常用的下拉刷新和上拉加载更多的功能实现做个记录,方便以后查看。在这里下拉刷新使用的是官方提供的Swip...

ANDROID权限机制

详细分析Android权限机制实现,分析APP组件、Android框架层、系统服务、原生守护进程的权限控制实现 Android APP运行在受限沙箱内,为了完成与其它APP或系统的交互,需要申请额外权限。权限在APP安装时被授权给应用,且在APP生命周期内保持不变。权限可以被映射为Linux补充GID,用于内核在授权访问系统资源时进行权限检查。 Binde...