一、Fragment与Activity的关系
成都创新互联专注于桦甸企业网站建设,响应式网站建设,电子商务商城网站建设。桦甸网站建设公司,为桦甸等地区提供建站服务。全流程定制网站开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
要理解动态管理Fragment首先要理解一下Fragment与Activity的关系
Fragment可以理解为将Activity划分为若干个片段,Fragment是Activity的一部分,生命周期是依赖Activity的,是不能单独存在的。这样不难理解所有Fragment的管理(查找、添加、删除、替换)都应该在Fragment所依赖的Activity中进行,也就是Activity才是Fragment交互的场所,不要试图在一个Fragment中去管理另一个Fragment虽然也可以实现要求的功能但是不符合规范的。要完成对Fragment的具体操作需要使用FragmentManager组件。
二、使用FragmentManager组件
使用FragmentManager组件的关键代码如下:
- //1、创建FragmentManager组件
- FragmentManager fm=super.getSupportFragmentManager();
- //2、查询方法,获得Activity中某一个Fragment
- fm.findFragmentById(R.id.fooler)
- fm.findFragmentByTag(”tagName”)
- //3、动态添加Fragment
- fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
- //4、替换Fragment
- fm.beginTransaction().replace(R.id.OldFragment, newFragment).commit();
- //5、删除Fragment
- fm.beginTransaction().remove(R.id.myFragment).commit();
- //6、向Fragment传递数据
- f.setArguments(Bundle )方法传递数据
上述管理Fragment代码应组织在Fragment所属的Activity中去,下面就通过一个案例来看看具体实现.
三、实现案例
首先看一下本次的应用案例(如图所示),当单击底部***个区域和第二区域时实现中心区域的切换
界面分析:有三个区域 :头部区域TitleFragment,中心区域是一个FrameLayout布局通过代码动态加载ContentFragment,底部区域FloorFragment
1、Activity的布局如下
3、ContentFragment代码
- RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- android:layout_width="match_parent"
- android:layout_height="45dp"
- android:name="com.jereh.android.course.fragment.TitleFragment"
- />
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@id/fgTitle"
- />
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:orientation="horizontal"
- android:name="com.jereh.android.course.fragment.FloorFragment"
- />
- 复制代码
- 2、FloorFragment代码
- 复制代码
- public class FloorFragment extends Fragment implements OnClickListener {
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- View view=inflater.inflate(R.layout.floor_fragment, container,false);
- LinearLayout home=(LinearLayout)view.findViewById(R.id.home);
- LinearLayout list=(LinearLayout)view.findViewById(R.id.list);
- home.setOnClickListener(this);
- list.setOnClickListener(this);
- return view;
- }
- //定义接口,该接口在Activity中去实现,降低Activity与Fragment的耦合度
- public interface OnContentFragmentListener{
- void setContentFragment(String param);
- }
- private OnContentFragmentListener onContentFragmentListener;
- public void setOnContentFragmentListener(
- OnContentFragmentListener onContentFragmentListener) {
- this.onContentFragmentListener = onContentFragmentListener;
- }
- @Override
- public void onClick(View view) {
- // TODO Auto-generated method stub
- if(onContentFragmentListener!=null){
- switch(view.getId()){
- case R.id.home:
- //回调机制,调用实现类的方法
- onContentFragmentListener.setContentFragment("主面板Fragment");
- break;
- case R.id.list:
- onContentFragmentListener.setContentFragment("列表信息");
- break;
- }
- }
- }
- }
- public class ContentFragment extends Fragment {
- private String title;
- public void setArguments(Bundle args) {
- title=args.getString("title");
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view=inflater.inflate(R.layout.content_fragment, container,false);
- if(title!=null)((TextView)view.findViewById(R.id.tvContent)).setText(title);
- return view;
- }
- }
4、DynaFragmentActivity代码
- public class DynaFragmentActivity extends FragmentActivity implements FloorFragment.OnContentFragmentListener {
- private ContentFragment contentFragment;
- private FloorFragment floor;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- super.setContentView(R.layout.dyna_fragment_activity);
- initFragment();
- }
- private void initFragment(){
- floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);
- floor.setOnContentFragmentListener(this);//注册侦听,传入实现类对象
- contentFragment=new ContentFragment();
- FragmentManager fm=super.getSupportFragmentManager();
- fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
- }
- public void setFragment(Fragment fragment){
- getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
- }
- @Override
- public void setContentFragment(String param) {
- // TODO Auto-generated method stub
- Bundle bundle=new Bundle();
- bundle.putString("title", param);
- contentFragment=new ContentFragment();
- contentFragment.setArguments(bundle);
- super.getSupportFragmentManager().beginTransaction()
- .replace(R.id.content, contentFragment).commit();
- }
- }
本文名称:安卓动态管理Fragment深入分析:“这几个组件你知道吗?”
标题路径:http://www.gawzjz.com/qtweb/news0/161400.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联