FragmentActivity与Fragment两者交互方法简介

分类: Fragment 2014-07-07 18:17 88人阅读 评论(0) 收藏 举报
在Android4.0后很多时候我们会大量使用到Fragment,Fragment与Activity的交互应该来说是非常重要的,但目前很多实例方法都只介绍了Fragment与Activity交互的方法,没有Activity与Fragment交互的方法,下面我来把解决的思路记录如下。
  1.首先我需要定义一个公共接口,用于将Fragment与FragmentActivity中的控件进行交互  

  1. public interface IBtnCallListener {
  2.   public void transfermsg();
  3.   }
public interface IBtnCallListener {

  public void transfermsg();
  }

2.当fragment中的Button控件需要与FragmentActivity中的Button控件交互时,在Fragment对应的子类中定义

  1. public class LaunchUIFragment extends Fragment implements
  2. IBtnCallListener{
  3.   IBtnCallListener mbtnListener;
  4.   private Button btn_Click;
  5.   @Override
  6.   public View onCreateView(LayoutInflater inflater, ViewGroup container,
  7.   Bundle savedInstanceState) {
  8.   View rootView = inflater.inflate(R.layout.fragment_selection_launch,
  9. container, false);
  10.   btn_Click=(Button) rootView.findViewById(R.id.bt_click);
  11.   btn_Click.setOnClickListener(new OnClickListener() {
  12.   @Override
  13.   public void onClick(View v) {
  14.   // TODO Auto-generated method stub
  15.   mbtnListener.transfermsg();
  16.   }
  17.   });
  18.   return rootView;
  19.   }
  20.   @Override
  21.   public void onActivityCreated(Bundle savedInstanceState) {
  22.   // TODO Auto-generated method stub
  23.   super.onActivityCreated(savedInstanceState);
  24.   }
  25.   @Override
  26.   public void onAttach(Activity activity) {
  27.   // TODO Auto-generated method stub
  28.   try {
  29.   mbtnListener=(IBtnCallListener) activity;
  30.   } catch (Exception e) {
  31.   // TODO: handle exception
  32.   throw new ClassCastException(activity.toString() + "must implement
  33. mbtnListener");
  34.   }
  35.   super.onAttach(activity);
  36.   }
  37.   @Override
  38.   public void transfermsg() {
  39.   // TODO Auto-generated method stub
  40.   System.out.println("由Activity传输过来的信息");
  41.   }
  42.   }
public class LaunchUIFragment extends Fragment implements
IBtnCallListener{   IBtnCallListener mbtnListener;
  private Button btn_Click;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
  View rootView = inflater.inflate(R.layout.fragment_selection_launch,
container, false);
  btn_Click=(Button) rootView.findViewById(R.id.bt_click);
  btn_Click.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  mbtnListener.transfermsg();
  }
  });
  return rootView;
  }
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onActivityCreated(savedInstanceState);
  }
  @Override
  public void onAttach(Activity activity) {
  // TODO Auto-generated method stub
  try {
  mbtnListener=(IBtnCallListener) activity;
  } catch (Exception e) {
  // TODO: handle exception
  throw new ClassCastException(activity.toString() + "must implement
mbtnListener");
  }
  super.onAttach(activity);
  }
  @Override
  public void transfermsg() {
  // TODO Auto-generated method stub
  System.out.println("由Activity传输过来的信息");
  }
  }

同时在FragmentActivity中对应相应

  

  1. public class MainActivity extends FragmentActivity implements
  2. IBtnCallListener{
  3.   public static final String ARGUMENTS_NAME = "arg";
  4.   private RelativeLayout rl_nav;
  5.   private SyncHorizontalScrollView mHsv;
  6.   private RadioGroup rg_nav_content;
  7.   private ImageView iv_nav_indicator;
  8.   private ImageView iv_nav_left;
  9.   private ImageView iv_nav_right;
  10.   private ViewPager mViewPager;
  11.   private int indicatorWidth;
  12.   public static String[] tabTitle = { "选项1", "选项2", "选项3", "选项4", "选项5" };
  13. //标题
  14.   private LayoutInflater mInflater;
  15.   private TabFragmentPagerAdapter mAdapter;
  16.   private int currentIndicatorLeft = 0;
  17.   private Button Btn_Test;
  18.   @Override
  19.   protected void onCreate(Bundle savedInstanceState) {
  20.   super.onCreate(savedInstanceState);
  21.   setContentView(R.layout.activity_main);
  22.   findViewById();
  23.   initView();
  24.   setListener();
  25.   }
  26.   /*
  27.   private void setListener() {
  28.   mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  29.   @Override
  30.   public void onPageSelected(int position) {
  31.   if(rg_nav_content!=null &&
  32. rg_nav_content.getChildCount()>position){
  33.   ((RadioButton)rg_nav_content.getChildAt(position)).performClick();
  34.   }
  35.   }
  36.   @Override
  37.   public void onPageScrolled(int arg0, float arg1, int arg2) {
  38.   }
  39.   @Override
  40.   public void onPageScrollStateChanged(int arg0) {
  41.   }
  42.   });
  43.   rg_nav_content.setOnCheckedChangeListener(new OnCheckedChangeListener()
  44. {
  45.   @Override
  46.   public void onCheckedChanged(RadioGroup group, int checkedId) {
  47.   if(rg_nav_content.getChildAt(checkedId)!=null){
  48.   TranslateAnimation animation = new TranslateAnimation(
  49.   currentIndicatorLeft ,
  50.   ((RadioButton) rg_nav_content.getChildAt(checkedId)).getLeft(), 0f,
  51. 0f);
  52.   animation.setInterpolator(new LinearInterpolator());
  53.   animation.setDuration(100);
  54.   animation.setFillAfter(true);
  55.   //执行位移动画
  56.   iv_nav_indicator.startAnimation(animation);
  57.   mViewPager.setCurrentItem(checkedId); //ViewPager 跟随一起 切换
  58.   //记录当前 下标的距最左侧的 距离
  59.   currentIndicatorLeft = ((RadioButton)
  60. rg_nav_content.getChildAt(checkedId)).getLeft();
  61.   mHsv.smoothScrollTo(
  62.   (checkedId > 1 ? ((RadioButton)
  63. rg_nav_content.getChildAt(checkedId)).getLeft() : 0) - ((RadioButton)
  64. rg_nav_content.getChildAt(2)).getLeft(), 0);
  65.   }
  66.   }
  67.   });
  68.   }
  69.   private void initView() {
  70.   DisplayMetrics dm = new DisplayMetrics();
  71.   getWindowManager().getDefaultDisplay().getMetrics(dm);
  72.   indicatorWidth = dm.widthPixels / 4;
  73.   LayoutParams cursor_Params = iv_nav_indicator.getLayoutParams();
  74.   cursor_Params.width = indicatorWidth;// 初始化滑动下标的宽
  75.   iv_nav_indicator.setLayoutParams(cursor_Params);
  76.   mHsv.setSomeParam(rl_nav, iv_nav_left, iv_nav_right, this);
  77.   //获取布局填充器
  78.   mInflater =
  79. (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
  80.   //另一种方式获取
  81.   // LayoutInflater mInflater = LayoutInflater.from(this);
  82.   initNavigationHSV();
  83.   mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager());
  84.   mViewPager.setAdapter(mAdapter);
  85.   Btn_Test=(Button) findViewById(R.id.btn_test);
  86.   Btn_Test.setOnClickListener(new OnClickListener() {
  87.   @Override
  88.   public void onClick(View v) {
  89.   // TODO Auto-generated method stub
  90.   mBtnCallListener.transfermsg();
  91.   }
  92.   });
  93.   }
  94.   */
  95.   private IBtnCallListener mBtnCallListener;
  96.   @Override
  97.   public void onAttachFragment(Fragment fragment) {
  98.   // TODO Auto-generated method stub
  99.   try {
  100.   mBtnCallListener=(IBtnCallListener) fragment;
  101.   } catch (Exception e) {
  102.   // TODO: handle exception
  103.   }
  104.   super.onAttachFragment(fragment);
  105.   }
  106.   @Override
  107.   public void transfermsg() {
  108.   // TODO Auto-generated method stub
  109.   System.out.println("由Fragment传输过来的信息");
  110.   }
  111.   /*
  112.   private void initNavigationHSV() {
  113.   rg_nav_content.removeAllViews();
  114.   for(int i=0;i
  115.   RadioButton rb = (RadioButton)
  116. mInflater.inflate(R.layout.nav_radiogroup_item, null);
  117.   rb.setId(i);
  118.   rb.setText(tabTitle[i]);
  119.   rb.setLayoutParams(new LayoutParams(indicatorWidth,
  120.   LayoutParams.MATCH_PARENT));
  121.   rg_nav_content.addView(rb);
  122.   }
  123.   }
  124.   private void findViewById() {
  125.   rl_nav = (RelativeLayout) findViewById(R.id.rl_nav);
  126.   mHsv = (SyncHorizontalScrollView) findViewById(R.id.mHsv);
  127.   rg_nav_content = (RadioGroup) findViewById(R.id.rg_nav_content);
  128.   iv_nav_indicator = (ImageView) findViewById(R.id.iv_nav_indicator);
  129.   iv_nav_left = (ImageView) findViewById(R.id.iv_nav_left);
  130.   iv_nav_right = (ImageView) findViewById(R.id.iv_nav_right);
  131.   mViewPager = (ViewPager) findViewById(R.id.mViewPager);
  132.   }
  133.   @Override
  134.   public boolean onCreateOptionsMenu(Menu menu) {
  135.   getMenuInflater().inflate(R.menu.main, menu);
  136.   return true;
  137.   }
  138.   public static class TabFragmentPagerAdapter extends
  139. FragmentPagerAdapter{
  140.   public TabFragmentPagerAdapter(FragmentManager fm) {
  141.   super(fm);
  142.   }
  143.   @Override
  144.   public Fragment getItem(int arg0) {
  145.   Fragment ft = null;
  146.   switch (arg0) {
  147.   case 0:
  148.   ft = new LaunchUIFragment();
  149.   break;
  150.   default:
  151.   ft = new CommonUIFragment();
  152.   Bundle args = new Bundle();
  153.   args.putString(ARGUMENTS_NAME, tabTitle[arg0]);
  154.   ft.setArguments(args);
  155.   break;
  156.   }
  157.   return ft;
  158.   }
  159.   @Override
  160.   public int getCount() {
  161.   return tabTitle.length;
  162.   }
  163.   }*/
  164.   }
public class MainActivity extends FragmentActivity implements
IBtnCallListener{   public static final String ARGUMENTS_NAME = "arg";
  private RelativeLayout rl_nav;
  private SyncHorizontalScrollView mHsv;
  private RadioGroup rg_nav_content;
  private ImageView iv_nav_indicator;
  private ImageView iv_nav_left;
  private ImageView iv_nav_right;
  private ViewPager mViewPager;
  private int indicatorWidth;
  public static String[] tabTitle = { "选项1", "选项2", "选项3", "选项4", "选项5" };
//标题
  private LayoutInflater mInflater;
  private TabFragmentPagerAdapter mAdapter;
  private int currentIndicatorLeft = 0;
  private Button Btn_Test;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  findViewById();
  initView();
  setListener();
  }
  /*
  private void setListener() {
  mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  @Override
  public void onPageSelected(int position) {
  if(rg_nav_content!=null &&
rg_nav_content.getChildCount()>position){
  ((RadioButton)rg_nav_content.getChildAt(position)).performClick();
  }
  }
  @Override
  public void onPageScrolled(int arg0, float arg1, int arg2) {
  }
  @Override
  public void onPageScrollStateChanged(int arg0) {
  }
  });
  rg_nav_content.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
  @Override
  public void onCheckedChanged(RadioGroup group, int checkedId) {
  if(rg_nav_content.getChildAt(checkedId)!=null){
  TranslateAnimation animation = new TranslateAnimation(
  currentIndicatorLeft ,
  ((RadioButton) rg_nav_content.getChildAt(checkedId)).getLeft(), 0f,
0f);
  animation.setInterpolator(new LinearInterpolator());
  animation.setDuration(100);
  animation.setFillAfter(true);
  //执行位移动画
  iv_nav_indicator.startAnimation(animation);
  mViewPager.setCurrentItem(checkedId); //ViewPager 跟随一起 切换
  //记录当前 下标的距最左侧的 距离
  currentIndicatorLeft = ((RadioButton)
rg_nav_content.getChildAt(checkedId)).getLeft();
  mHsv.smoothScrollTo(
  (checkedId > 1 ? ((RadioButton)
rg_nav_content.getChildAt(checkedId)).getLeft() : 0) - ((RadioButton)
rg_nav_content.getChildAt(2)).getLeft(), 0);
  }
  }
  });
  }
  private void initView() {
  DisplayMetrics dm = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(dm);
  indicatorWidth = dm.widthPixels / 4;
  LayoutParams cursor_Params = iv_nav_indicator.getLayoutParams();
  cursor_Params.width = indicatorWidth;// 初始化滑动下标的宽
  iv_nav_indicator.setLayoutParams(cursor_Params);
  mHsv.setSomeParam(rl_nav, iv_nav_left, iv_nav_right, this);
  //获取布局填充器
  mInflater =
(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
  //另一种方式获取
  // LayoutInflater mInflater = LayoutInflater.from(this);
  initNavigationHSV();
  mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager());
  mViewPager.setAdapter(mAdapter);
  Btn_Test=(Button) findViewById(R.id.btn_test);
  Btn_Test.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  mBtnCallListener.transfermsg();
  }
  });
  }
  */
  private IBtnCallListener mBtnCallListener;
  @Override
  public void onAttachFragment(Fragment fragment) {
  // TODO Auto-generated method stub
  try {
  mBtnCallListener=(IBtnCallListener) fragment;
  } catch (Exception e) {
  // TODO: handle exception
  }
  super.onAttachFragment(fragment);
  }
  @Override
  public void transfermsg() {
  // TODO Auto-generated method stub
  System.out.println("由Fragment传输过来的信息");
  }
  /*
  private void initNavigationHSV() {
  rg_nav_content.removeAllViews();
  for(int i=0;i
  RadioButton rb = (RadioButton)
mInflater.inflate(R.layout.nav_radiogroup_item, null);
  rb.setId(i);
  rb.setText(tabTitle[i]);
  rb.setLayoutParams(new LayoutParams(indicatorWidth,
  LayoutParams.MATCH_PARENT));
  rg_nav_content.addView(rb);
  }
  }
  private void findViewById() {
  rl_nav = (RelativeLayout) findViewById(R.id.rl_nav);
  mHsv = (SyncHorizontalScrollView) findViewById(R.id.mHsv);
  rg_nav_content = (RadioGroup) findViewById(R.id.rg_nav_content);
  iv_nav_indicator = (ImageView) findViewById(R.id.iv_nav_indicator);
  iv_nav_left = (ImageView) findViewById(R.id.iv_nav_left);
  iv_nav_right = (ImageView) findViewById(R.id.iv_nav_right);
  mViewPager = (ViewPager) findViewById(R.id.mViewPager);
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
  }
  public static class TabFragmentPagerAdapter extends
FragmentPagerAdapter{
  public TabFragmentPagerAdapter(FragmentManager fm) {
  super(fm);
  }
  @Override
  public Fragment getItem(int arg0) {
  Fragment ft = null;
  switch (arg0) {
  case 0:
  ft = new LaunchUIFragment();
  break;
  default:
  ft = new CommonUIFragment();
  Bundle args = new Bundle();
  args.putString(ARGUMENTS_NAME, tabTitle[arg0]);
  ft.setArguments(args);
  break;
  }
  return ft;
  }
  @Override
  public int getCount() {
  return tabTitle.length;
  }
  }*/
  }

 其中,主要部分是Fragment需要重写OnAttach方法,将接口对象实例化,同时在Activity要实现对应接口的方法,在该方法中实现你想要的功能,这样就可以由Fragment灵活交互FragmentActivity中的内容与控件了

  同理,FragmentActivity想要交互对应的Fragment也需要重写FragmentActivity的OnAttachFragment方法,同时在
  Fragment中实现对应接口的方法,在该方法中实现你想要的功能,这样就可以由FragmentActivity灵活交互Fragment中的内容与控件了 (主要看没有注释的部分)
  其实,交互的思路都是一样的,全都是通过一个公共的接口调用,在对应的地方实现。

FragmentActivity与Fragment两者交互方法简介(转)的更多相关文章

  1. Android FragmentActivity 给Fragment传值

    1.Fragment给Activity传值 定义一个在fragment 中 定义interface 监听器,让activity实现,并将activity的引用传递给fragment.即setListe ...

  2. 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】

    推荐下,觉得这个方法有用, 今天艾薇百科来介绍一下功能强大的Greasemonkey,俗称"油猴子",Greasemonkey可以自由定制网页,实现你想要的各种功能.堪称" ...

  3. Redis Cluster搭建方法简介22211111

    Redis Cluster搭建方法简介 (2013-05-29 17:08:57) 转载▼       Redis Cluster即Redis的分布式版本,将是Redis继支持Lua脚本之后的又一重磅 ...

  4. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

  5. android FragmentActivity+FragmentTabHost+Fragment框架布局

    这周比较闲,计划系统的学习一下android开发,我本是一名IOS程序员,对手机开发还是有自己的一套思路的, 固这套思路用到我当前学android上了,先选择从Main页面的tabbar部分代码入手, ...

  6. C#——Marshal.StructureToPtr方法简介

    目录 MarshalStructureToPtr方法简介 功能及位置 语法 参数说明 异常 备注 举例 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三 ...

  7. Android -- FragmentActivity添加Fragment的序列图

    FragmentActivity添加Fragment的序列图

  8. 【转】解决Fragment already active方法

    http://blog.csdn.net/u011730649/article/details/43227721 今天在项目中使用Fragment的时候出现这样的错误: 01-28 10:53:34. ...

  9. iOS与HTML5交互方法总结(转)

    今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢?   还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...

随机推荐

  1. 部署php项目

    1.不写端口号,即127.0.0.1,其隐含一个默认端口号80 2.查看当前占用的端口号 3.nginx修改工作路径,nginx修改端口号 4.查看端口号是否可访问telnet命令 在dos界面输入命 ...

  2. MFC通过ODBC连接Mysql程序

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 MFC通过ODBC连接 ...

  3. document.domain的修改问题

    有时候,需要修改document.domain. 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B ...

  4. javascript小数乘法精确率问题

    做前端页面开发的经常会遇到数值的乘法计算,带小数位计算会出现值溢出的问题,如: JS里做小数的乘法运算时会出现浮点错误,具体可以测试一下: <script>alert(11*22.9)&l ...

  5. QML插件扩展(一)

    准备分两节来介绍QML扩展插件,分别为 (一)基于QML文件的扩展方式 (二)基于C++的插件扩展 这篇先介绍基于QML的插件扩展. 先介绍几个基本概念: qmldir: 用于组织自定义的QML插件, ...

  6. WPF_DatePiker控件的禁止输入

    <!--DatePicker没有只读属性,需要修改里面的DatePickerTextbox--!> <DatePicker.Resources> <Style Targe ...

  7. 【SQL】SQL

    SQL基础 本文参照:http://www.w3school.com.cn/sql/ SQL 结构化查询语言(Structured Query Language). 对于大小写不敏感. SQL 使用单 ...

  8. HTML+CSS D07 边框、div

    1.边框(border) 常用表达 border-width px thin 定义细的边框. medium 默认.定义中等的边框. thick 定义粗的边框. length 允许您自定义边框的宽度. ...

  9. Beam me out!

    Beam me out! 题目描述 King Remark, first of his name, is a benign ruler and every wrongdoer gets a second ...

  10. UIKit控件直接显示网页文字内容

    NSString *html = @"<bold>Hello</bold> Now<br> <em>iOS</em> can cr ...