您的位置:首页 > 移动开发 > Android开发

初识android——Fragment

2016-03-04 17:21 399 查看

一:Fragment引入的原因

为了适应大屏幕的平板电脑,由于平板电脑的屏幕很大,可以容纳比手机更多的ui组件,并且ui组件直接存在着交互。Fragment简化了大屏幕ui的设计,它不需要开发者管理组件的包含关系和复杂变化,开发者使用Fragment对ui组件进行分组、模块化管理,可以更方便地在运行过程中动态的更新Activity的用户界面。

二:包与继承关系:



三:创建Fragment

1、开发者实现的Fragment必须继承Fragment基类或它的子类

2、需要实现的方法:

onCreate():系统创建Fragment对象后回调这个方法,实现代码中只初始化想要的在Fragment中保持的必要组件,当Fragment被暂停或停止后可以恢复;

onCreateView():当Fragment绘制界面组件是回调这个方法。该方法必须返回一个View,该View即Fragment所显示的View

onCreateView()方法重写:

@Override
public void onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
//加载/res/layout/目录下的自定义Fragment布局文件myfragment_layout
View rootView = inflater.inflat(R.layout.myfragment_layout,container,false);
//获取布局文件中的一个控件
TextView textView = (TextView)rootView.findViewById(R.id.textview);
//do something
...
...
...
return rootView;
}


四:在Activity布局文件中部署Fragment

部署Fragment有两种方式:

在布局文件中直接使用 fragmen标签来指定Fragment,如:

<fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
android:id="@+id/titles" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />


通过FrameLayout来部署Fragment,如:

<FrameLayout android:id="@+id/details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />


通过这种方式部署的Fragment在Activity中可使用FragmentManager对Fragment进行替换

//MyFragment 是自定义Fragment
MyFragment myfragment  = new MyFragment();
//向将要替换的Fragment对象中存入一些数据
Bundle bundle = new Bundle();
bundle.putXxx("InfoKey",InfoValue);
myfragment.setArguments(bundle);
//通过FragmentManager对Fragment进行替换
getFragment().beginTransaction().replace(R.id.detail,myfragment).commit();
//R.id.detail:Activity的布局文件中FrameLayout的id


五:Fragment与Activity之间的通信

Activity向Fragment传递信息可以借助Bundle来完成

Fragment向Activity传递信息:

⑴:在Fragment中第一一个回调接口,该Fragment所在的Activity需要实现这个接口,该Fragment将通过这个接口与Activity进行通信

public interface CallBacks{
public void onItemSelected(int id);
}


⑵:Fragment需要重写onAttach(),和onDetach()方法


private CallBacks mcallbacks
//当该Fragment被添加、显示到Activity时,回调该方法
@Override
public void onAttach(Activity activity){
super.onAttach();
//把该Activity当成CallBacks对象
mcallbacks= (CallBacks)activity;
}
//当该Fragment从Activity删除时,回调此方法
@Override
public void onDetach(){
super().Detach();
//将mcallbacks赋为null
mcallbacks = null;
}


⑶:Fragment所在的Activity实现其回调方法,Fragment通过自定义回调方法的参数来传递信息

⑷:为Fragment添加事件监听器,在适当时候调用mcallbacks.onItemSelected(infomations);向Activity传递信息,这句代码本质就是调用Activity中的onItemSelected方法,因为mcallbacks =(CallBack) Activity;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android