Fragment用法简述
来源:互联网 发布:aws centos root 编辑:程序博客网 时间:2024/06/07 11:12
Fragment,碎片,与activity有很大的相似性,可以认为是迷你版的activity。
以下是使用Fragment的方法以及要注意的地方。
一、Fragment的创建
首先,你想使用Fragment碎片,你要先创建一个Fragment。
创建Fragment分两步实现:
(1)创建一个布局文件,可以是一个很简单的布局,如下:
布局名称为:
left_fragment.xml
<?xml version="1.0" encoding="UTF-8"?><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" > <Button android:id="@+id/button"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试按钮" /> </LinearLayout>
(2)在工程中新建一个.java文件,该文件继承Fragment并加载上方的布局文件,如下:
文件名:
LeftFragment.java
package com.example.fragmentfirst;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Toast;public class LeftFragment extends Fragment {public LeftFragment() {// TODO Auto-generated constructor stub}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view=inflater.inflate(R.layout.left_fragment, container, false);return view;} }
二、Fragment如何在activity中使用
如果说,要在Fragment中使用activity中的方法等,很简单,只需要用getActivity()就可以引用到;那么如何在Activity中使用Fragment中的方法和熟悉呢?
举例如下:
新建一个android工程,里面有默认的MainActivity.java界面以及对应的布局文件。
那么如何使用Fragment以及其中的方法呢?
首先,activity需要添加Fragment,如何添加呢?
有两种方法,动态添加和静态添加。
(1)静态添加:
在布局文件中activity_main.xml中,添加fragment标签,标签的name是需要注意的地方,要使用全路径名,如:
com.example.fragmentfirst.LeftFragment
<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="horizontal" tools:context=".MainActivity" > <fragment android:id="@+id/left" android:name="com.example.fragmentfirst.LeftFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/f1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" > </FrameLayout></LinearLayout>这样就静态的将fragment添加到activity中了,运行程序,可以看到效果。
这里还有个要注意的地方,在LinearLayout布局中,又使用了一个FrameLayout布局。这个布局主要是为后续提到的动态添加做准备的。
(2)动态添加:
动态添加,就是在代码中做添加操作。
动态添加很需要注意的是布局文件。我们的布局文件还是如上方一样。有个空的FrameLayout布局,这个布局是作为一个容器使用的,用于显示新增或者替换后的碎片。
如果不用这个布局容器,会出现后续替换的碎片不能完全覆盖上一个碎片,或者重叠现象。
我们在MainActivity.java中添加如下代码:
OtherFragment otherFragment=new OtherFragment(); FragmentManager fragmentManager=getFragmentManager(); FragmentTransaction fTransaction=fragmentManager.beginTransaction(); fTransaction.add(R.id.f1, otherFragment); fTransaction.addToBackStack(null); fTransaction.commit();
其中的OtherFragment是仿LeftFragment定义的一个.java文件。
对于动态添加的几个类,我们做如下理解:
FragmentManager:Fragment的管理类,这个类的实例,可以通过系统提供的getFragmentManager()方法来得到;
FragmentTransaction:这个是Fragment的事物类,用于处理Fragment的添加、替换、删除操作,用管理类的beginTransaction方法得到实例;
fTransaction.add(R.id.f1, otherFragment):这个是添加碎片的实际操作。第一个参数,用的是布局FrameLayout的id(如果不用该布局容器,有可能造成重叠),第二个参数是想要添加的碎片。
fTransaction.addToBackStack(null):这个是为了把被替换前的碎片或者说是上一个碎片,放入到栈中,以便按回退键的时候,能退到上一个碎片上。
fTransaction.commit():这个就是把事物提交。
通过上面的两个步骤,我们已经可以使用fragment了。
三、Activity中使用Fragment中的控件
在activity中我们如果要得到与之关联的fragment的控件,该如何操作?
有两种办法:
(1)findFragmentById(R.id.xx)
这个是通过查找系统生成的id的方式来查找的,如我在LeftFragment中定义了一个Button,要在activity中使用:
Button button=(Button) ((LeftFragment)getFragmentManager().findFragmentById(R.id.left)).getView().findViewById(R.id.button);
(2)findFragmentByTag(tagString)
这个是通过查找标签的形式来得到碎片以及上面的控件。需要这些碎片已经存在于栈中,如果碎片没有存于栈中,可如下操作:
FragmentManager fragmentManager=getFragmentManager(); LeftFragment leftFragment1=(LeftFragment)fragmentManager.findFragmentByTag(tagString); if(leftFragment1==null) { leftFragment1=new LeftFragment(); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); fragmentTransaction.add(leftFragment1, tagString); fragmentTransaction.commit(); }
个人来说,使用第一种方式较多。
OK,以上是记录的简述,仅供参考。
- Fragment用法简述
- 简述Fragment
- Fragment简述
- 简述fragment(上)
- Android之Fragment简述
- Fragment的addSharedElement方法简述
- Fragment用法
- Fragment用法
- Fragment用法
- Fragment用法
- Fragment用法
- Fragment用法
- fragment用法
- Fragment 用法
- sizeof用法简述
- JOIN用法简述
- synchronized关键字用法简述
- PerformanceCounter简述及用法
- DCloud学习(一)
- 黑马程序员——基础知识——网络传输
- Zigbee网关 上电时Zstack串口乱码
- angularJS的实战(视频)
- C++编码规范(1):代码注释
- Fragment用法简述
- 第6条:消除过期的对象引用
- 数据库基本操作简单sql语句
- Java ArrayList遍历时删除一个元素
- C++编码规范(2):命名规范
- Android开发懒人库 -- ButterKnife
- Nginx代理Tomcat
- 【原创】Jpeg渐进式图像数据解析
- Gym 100803G Flipping Parentheses