当前位置: 首页 > news >正文

Xamarin.Android中的Fragment

目录

  • 1、Activity中使用Fragment
  • 2、Fragment与Activity通信
  • 3、Fragment与其他的Fragment通信

1、Activity中使用Fragment

一般而言,会在activity中添加一个加载fragment的方法。通过点击菜单的按钮,加载不同的fragment。其样子一般是这样的:

public void LoadFragment(int id,string detailFragment,string fragmentArgs)
{try {AndroidX.Fragment.App.Fragment fragment = null;switch (id){case Resource.Id.menu_workspace:fragment = WorkspaceMainFragment.NewInstance(id);//传入某个/些参数break;case Resource.Id.menu_hospital:fragment = HospitalFragment.NewInstance();break;case Resource.Id.menu_mine:fragment = LoginFragment.NewInstance();break;default:break;}if (fragment == null)return;SupportFragmentManager.BeginTransaction().Replace(Resource.Id.content_frame, fragment).AddToBackStack(null) //支持回退.Commit();}catch(Exception ex){Toast.MakeText(this, "发生异常!异常信息如下:LoadFragment" + ex.Message, ToastLength.Long).Show();}
}

fragment中往往通过工厂模式,提供及返回实例

public class PlayQuoteFragment : Fragment
{//这儿是一个属性。通过Arguments获取数据public int PlayId => Arguments.GetInt("current_play_id", 0);//这儿是通过工厂模式,提供fragment的实例public static PlayQuoteFragment NewInstance(int playId){//Bundle其实放在这儿,或者放到activity的LoadFragment方法中都是可以的//但放在这儿会更好。若放在activity中,则需要命名不同的Bundle//放在这儿,可以实现对外,只是一个工厂方法和参数即可。外界不需要知道内部的具体事务var bundle = new Bundle();bundle.PutInt("current_play_id", playId);return new PlayQuoteFragment {Arguments = bundle};}public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){if (container == null){return null;}var textView = new TextView(Activity);var padding = Convert.ToInt32(TypedValue.ApplyDimension(ComplexUnitType.Dip, 4, Activity.Resources.DisplayMetrics));textView.SetPadding(padding, padding, padding, padding);textView.TextSize = 24;textView.Text = Shakespeare.Dialogue[PlayId];var scroller = new ScrollView(Activity);scroller.AddView(textView);return scroller;}
}

2、Fragment与Activity通信

非常简单,因为fragment一定是要寄存到某个activity中。因此直接使用如下代码:

var myActivity = (MyActivity) this.Activity;
myActivity.SomeCustomMethod();

3、Fragment与其他的Fragment通信

通过FragmentManager查找ID,获取fragment

var emailList = FragmentManager.FindFragmentById<EmailListFragment>(Resource.Id.email_list_fragment);
emailList.SomeCustomMethod(parameter1, parameter2);
http://www.lryc.cn/news/141014.html

相关文章:

  • portainer初体验
  • 4G数传方案(合宙cat1模块)
  • ElasticSearch - 海量数据索引拆分的一些思考
  • 【SA8295P 源码分析】83 - SA8295P HQNX + Android 完整源代码下载方法介绍
  • 【设计模式--原型模式(Prototype Pattern)
  • 初识 Redis
  • php灵异事件,啥都没干数据变了?
  • 【ffmpeg】基于需要使用videocapture的opencv编译配置(C++)
  • Redisson分布式锁 原理源码 分析
  • Cocos独立游戏开发框架中的事件管理器
  • keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群
  • 网络安全(黑客)零基础自学
  • 如何把本地项目上传github
  • 跳跃游戏【贪心算法】
  • vue2+element-ui 实现下拉框滚动加载
  • 探索AIGC人工智能(Midjourney篇)(二)
  • 01-Flask-简介及环境准备
  • 【Git游戏】远程分支
  • Day07-ElementUI
  • 【Go 基础篇】Go语言中的defer和recover:优雅处理错误
  • 4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
  • 如何在VSCode中将html文件打开到浏览器
  • 2022年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 五公里场地训练笔记(完整版)
  • 【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
  • 使用 OpenAI GPT 模型的最佳实践
  • 解除用户账户控制提醒
  • 行业追踪,2023-08-23
  • 算法修炼Day60|● 84.柱状图中最大的矩形
  • 前端面试题css(一)