Fragment(碎片)
Fragment的创建
1、自定义类继承Fragment
2、复写onCreateView方法,返回view对象
3、在Activity中添加显示此自定义Fragment
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
@param inflater 布局填充器,使用它可以动态填充xml布局文件,并返回View对象
@param container Fragment被包含的ViewGroup对象,Fragment的父布局
@param Bundle 通过Bundle对象可以实现现场保护功能
Fragment的显示
#静态显示
1、xml布局文件中使用<fragment>标签,声明需要显示的Fragment
2、一定要添加id/tag,通过这个id/tag,可以用FragmentManager找到此Fragment
3、指定name属性,它指向Fragment的绝对路径
#动态显示
1、xml布局文件中,创建Fragment的占位布局,通常使用FrameLayout
2、java代码中,获取FragmentManager
3、通过FragmentManager获取FragmentTransaction
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
4、通过FragmentTransaction可以对Fragment进行一系列操作
5、调用FragmentTransaction.commit()提交事务
Fragment与Activity之间的传值
Activity->Fragment
1、通过Fragment.setArgument可以向被添加Fragment对象中存储相应的数据
2、初始化Bundle对象,并传入数据
3、将bundle传给Fragment对象
<span style="font-size:14px;"><span style="white-space: pre;"> </span>FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
//通过Fragment.setArgument可以向被添加Fragment对象中存储相应的数据
FragmentContent fragmentContent = new FragmentContent();
//初始化Bundle对象,并传入数据
Bundle bundle = new Bundle();
bundle.putString("key", "这是从MainActivity中传进来的数据");
//将bundle传给Fragment对象
fragmentContent.setArguments(bundle);
transaction.add(R.id.containerId, fragmentContent);
transaction.commit();</span><span style="font-size: 14px;">
</span>
4、在自定义Fragment类中,通过bundle=getArguments()取出bundle
Fragment->Activity
使用接口回调传值的方法,步骤:
1、在Fragment中创建公共接口类,并创建此接口类的全局变量,例如
private ItemClickCallback itemClickCallback;
public interface ItemClickCallback{
public void onItemClickCalled();
}
2、创建setInterface方法
public void setItemClickCallback(ItemClickCallback itemClickCallback){
this.itemClickCallback=itemClickCallback;
}
3、在宿主Activity中实现此接口,并实现抽象方法
4、宿主Activity显示Fragment时,通过setItemClickCallback将Activity本身传入Fragment中的itemClickCallback
需要判断宿主Activity是否已经实现内部接口
Activity activity=getActivity();
if(activity instanceof ItemClickCallback){
setItemClickCallback((ItemClickCallback)activity);
}