Fragment通常用于在屏幕一部分的显示,比如在新闻应用中,左侧是新闻的类别,点击相应类别右侧的大半部分屏幕会显示相应的新闻;
Fragment的使用方法:
1、为Fragment写一个布局;
2、在Activity的布局中声明fragment
3、创建一个类继承自Fragment,用于显示、处理布局
其中,onAttach()方法是当Fragment和Activity建立关联时调用
onCreateView()加载布局时调用
onActivityCreate()在Activity创建完毕时调用
onDestroyVIew在视图移除时调用
onDetach()在关系解除时调用
4、Fragment和Activity之间的通信:
Activity中获取Fragment中的实例:通过getFragmentManage;
Fragment获取Activity的方法:通过getActivity;
关于Fragment补充:
1、创建Fragment最好使用V4包的,因为V4包兼容性更好;
2、使用Fragment的Activity最好是FragmentActivity,根据网上所说,否则可能会出现异常错误。
3、Fragment有动态加载和静态加载两种,所谓静态加载,就是在Activity的布局中,引入
<fragment>标签,同时设置name属性为Fragment类的引用。动态加载则是通过FragmentManager创建一个事务来加载:
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
AdminAddAccountFragment adminCheckGradeFragment =
new
AdminAddAccountFragment();
transaction.replace(R.id.
ll_container
,adminCheckGradeFragment).commit();
R.id.ll_container是Activity布局中一个容器,如LenearLayout之类
关于Fragment与Activity通信的补充:
1、Activity向Fragment传递数据:
在动态加载中,给Fragment通过
setArguments方法传入数据,在Fragment中get:
例:
TeacherSelfInfoFragment self =
new
TeacherSelfInfoFragment();
Bundle bundle =
new
Bundle();
bundle.putString(
"path"
,picturePath);
self.setArguments(bundle);
FragmentTransaction transaction =
manage
.beginTransaction();
transaction.replace(R.id.
ll_teacher
,self).commit();
上面是给Fragment传递数据,以下是Fragment接收数据:
Bundle bundle = getArguments();
2、Fragment向Activity传递数据:
通过回调方法:
1)在Fragment中建立一个抽象类:
private
FragmentInteract
interact
;
public interface
FragmentInteract{
void
process(
int
i);
}
2)Activity继承并实现该抽象类:
@Override
public void
process(
int
i) {
if
(i ==
1
){
showPopueWindow();
}
else if
(i ==
2
){
Intent intent =
new
Intent(Intent.
ACTION_GET_CONTENT
);
intent.setType(
"*/*"
);
intent.addCategory(Intent.
CATEGORY_OPENABLE
);
startActivityForResult(intent,
FILE_CODE
);
}
}
3)在Fragment中通过使用这个抽象类中的抽象方法,便可以与Activity通信
interact.process(
1);