Android入门教程 | Fragment (加载方法与通信)

发布时间:2026/8/27 12:52:22
Android入门教程 | Fragment (加载方法与通信) Fragment 加载方法加载方法有两种在xml文件中注册在Java代码中加载xml中注册例如在fragment_demo.xml中定义?xml version1.0encodingutf-8?LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalfragmentandroid:idid/main_fragment_upandroid:namecom.rust.fragment.FirstFragmentandroid:layout_widthmatch_parentandroid:layout_height0dpandroid:layout_weight1/fragmentandroid:idid/main_fragment_bottomandroid:namecom.rust.fragment.SecondFragmentandroid:layout_widthmatch_parentandroid:layout_height0dpandroid:layout_weight1//LinearLayoutcom.rust.fragment.SecondFragment就是 Fragment 子类 在SecondFragment.java里复写onCreateView方法并返回定义好的viewactivity 中直接加载即可setContentView(R.layout.fragment_demo);Java代码中加载①准备好Fragment xml布局文件 ②新建一个类继承自 Fragment在这个类中找到 Fragment 布局文件 ③在 Activity 中使用 FragmentManager 来操作 Fragment ④别忘了commit先自定义一个布局文件fragment_first.xml?xml version1.0encodingutf-8?LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:background#0011ff!--Buttonandroid:idid/btn_fragment1_1android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textstring/btn_fragment1android:textSize16sp/EditText/--/LinearLayout新建一个类FirstFragment.java继承自 Fragment。复写onCreateView方法。在onCreateView方法中可以操作 Fragment 上的控件。OverridepublicViewonCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View rootViewinflater.inflate(R.layout.fragment_first,container,false);// fragment_first是自定义好的布局// 如果此Fragment上放了控件比如ButtonEdittext等。可以在这里定义动作btn_fragment1_send(Button)rootView.findViewById(R.id.btn_fragment1_1);//...returnrootView;}准备一个位置给 Fragment比如在activity_main.xml中用 Framelayout 来占位。FrameLayoutandroid:idid/layout_container1android:layout_widthmatch_parentandroid:layout_height0dpandroid:layout_weight4/FrameLayout在MainActivity.java里先获得 FragmentManager得到FragmentTransaction。Fragment 的添加删除等操作由 FragmentTransaction 来完成。f1newFirstFragment();// 获取实例f2newSecondFragment();//FragmentTransaction fragmentTransactiongetFragmentManager().beginTransaction();fragmentTransaction.add(R.id.layout_container1,f1);// 添加fragmentTransaction.replace(R.id.layout_container1,f1);// 替换// 或者也可以写成fragmentTransaction.replace(R.id.layout_container1,newFirstFragment());// fragmentTransaction.addToBackStack(null); //添加到返回栈这样按返回键的时候能返回已添加的fragmentfragmentTransaction.commit();//别忘了commit// 移除操作 getFragmentManager().beginTransaction().remove(f1).commit();相比与 xml 中注册代码加载更为灵活一些。个人较为喜欢动态加载。Fragment 与 Activity 之间的配合Activity 先执行onResume然后当前 Fragment 执行onResume当前Fragment 被 replace 掉再次 replace 回来时有些状态并未重新初始化。 执行 replace 时会把 Fragment 的声明周期再跑一遍。稳妥的做法是在onCreateView中初始化必要的变量。比如重置一些状态值。在多个 Fragment中切换时需要特别注意。Fragment 间的通信在 Fragment 的 java 文件中可以使用getActivity()来获得调用它的 activity然后再找到另一个 Fragment进行通信getActivity().getFragmentManager().findFragmentById(R.id.fragment_list);但这样做耦合度太高不方便后续的修改操作Fragment 与其附着的 Activity 之间的通信都应该由 Activity 来完成不能是多个 Fragment 之间直接通信Fragment与其附着的Activity之间通信方式在发起事件的Fragment中定义一个接口接口中声明你的方法在onAttach方法中要求Activity实现该接口在Activity中实现该方法例如一个 activity 中布置了 2 个 Fragment它们之间的通信要依靠 activity 来完成代码ListStoreActivity.javaNewItemFragment.javaListStoreFragment.java布局文件为liststore.xmlnew_item_fragment.xml准备布局文件liststore.xml用 LinearLayout 中放置了 2 个 fragment分别指向 2 个Fragment 文件new_item_fragment.xml中并排放置一个 EditText 和一个按钮ListStoreFragment.java使用前面定义的界面publicclassListStoreFragmentextendsListFragment{/// 继承自ListFragment已经封装好了listview/// 不需要自己写ListView了}NewItemFragment.java/** * 声明一个接口定义向activity传递的方法 * 绑定的activity必须实现这个方法 */publicinterfaceOnNewItemAddedListener{publicvoidnewItemAdded(String content);}privateOnNewItemAddedListener onNewItemAddedListener;privateButton btnAddItem;/*复写onAttach方法*/OverridepublicvoidonAttach(Activity activity){super.onAttach(activity);try{onNewItemAddedListener(OnNewItemAddedListener)activity;}catch(ClassCastException e){thrownewClassCastException(activity.toString()must implement OnNewItemAddedListener);}}ListStoreActivity.java加载主视图liststore.xml;两个 Fragment 通过ListStoreActivity来通信在 onCreate 方法中获取 ListStoreFragment 的实例并且复写 newItemAdded 方法在里面加上业务逻辑publicclassListStoreActivityextendsActivityimplementsOnNewItemAddedListener{privateArrayListStringdata;privateArrayAdapterStringadapter;OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.liststore);datanewArrayListString();// 把data装入adapter中adapternewArrayAdapterString(this,android.R.layout.simple_list_item_1,data);// ListFragment并不需要再定义一个listviewListStoreFragment listStoreFragment(ListStoreFragment)getFragmentManager().findFragmentById(R.id.fragment_listview);listStoreFragment.setListAdapter(adapter);}OverridepublicvoidnewItemAdded(String content){// 复写接口中的方法业务代码在这里实现if(!content.equals()){data.add(content);adapter.notifyDataSetChanged();}}}这样做的缺点是耦合度很高Fragment跟Activity的几种通信方式Activity把自己的handler交给Fragment广播EventBus定义接口除了上面提到的几种方法也可以用 Activity 和 Fragment 共用 ViewModel的方式实现通信。最后分享一份【腾讯技术团队出品】Android零基础入门到精通Android Studio安装教程全套安卓基础教程Android编程入门教程Java语言基础从入门到熟悉Kotlin语言基础从入门到熟悉Android 技术栈从入门到熟悉Android Jetpack 全家桶全面学习对于新手来说可能安装Android Studio存在一定困难你可以看着以下视频一步步的跟着学习安装运行Android Studio 安装教程有了Java阶段的学习这一阶段建议以视频学习为主辅以图书查漏补缺。如果以图书为主可以根据图书讲解敲代码辅以教学视频查漏补缺。遇到问题可以去百度入门的问题一般会有很多人遇到并且给出比较好的解答。需要掌握基本知识点比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画、网络通信等常见技术。全套零基础教程已经为你们准备好了需要的可以添加下方二维码免费领取全套安卓基础教程