Fragment组件怎么用

这篇文章主要介绍“Fragment组件怎么用”,在日常操作中,相信很多人在Fragment组件怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Fragment组件怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司专注于集安网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供集安营销型网站建设,集安网站制作、集安网页设计、集安网站官网定制、小程序开发服务,打造集安网络公司原创品牌,更为您提供集安网站排名全网营销落地服务。

一、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中去,下面就通过一个案例来看看具体实现.

三、实现案例

首先看一下本次的应用案例(如图所示),当单击底部***个区域和第二区域时实现中心区域的切换

Fragment组件怎么用

界面分析:有三个区域 :头部区域TitleFragment,中心区域是一个FrameLayout布局通过代码动态加载ContentFragment,底部区域FloorFragment

1、Activity的布局如下

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fgTitle" android:layout_width="match_parent" android:layout_height="45dp" android:name="com.jereh.android.course.fragment.TitleFragment" /> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/fgTitle" /> <fragment android:id="@+id/floor" 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" /> </RelativeLayout>  复制代码 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; } } } } 3、ContentFragment代码
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组件怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!

网页题目:Fragment组件怎么用
新闻来源:https://www.cdcxhl.com/article26/jicpjg.html

成都网站建设公司_创新互联,为您提供定制开发响应式网站面包屑导航网站设计小程序开发全网营销推广

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司