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. 一个基于DpperHelper的t4模板

    自定义模板,空的类(目的是和t4生成的模板分开,以免被覆盖) ExtensionDAL <#@ template debug="false" hostspecific=&qu ...

  2. Python第三方库安装技巧

    pytho下有三种安装第三方库方法: 1.通过easy_install安装 2.通过Pip安装 前面两种,由于受国内部门网站原因,如果安装失败,可采用接下来的第三种方法 3.在指定网站下载安装 第三方 ...

  3. vbs鼠标方法——模拟鼠标按键

    '*********************************************************************** ' 代码开始 '******************* ...

  4. ASP.NET—013:实现带控件的弹出层(弹出框)

    http://blog.csdn.net/yysyangyangyangshan/article/details/38458169 在页面中用到弹出新页面的情况比较多的,一般来说都是使用JS方法sho ...

  5. MVC 数据绑定

    在做Asp.Net MVC项目中,都知道View负责页面展示数据或者提供页面收集数据,而所展示的数据或者收集的数据都是从Controller的Action中获取或提交到Controller的Actio ...

  6. Django:之传递数据给JS、Ajax和Ajax CSRF认证

    Django传递数据给JS 有时候我们想把一个list或者dict传递给javascript,处理后显示到网页上,比如要用js进行可视化到数据. 请注意:如果是不处理,直接显示在网页上,用Django ...

  7. utf8 文件 错误保存为gbk 中文乱码 解决方法

    用zend studio  将utf-8 格式的文件 保存为 gbk 了,之后无论怎么装换 中文都是乱码 用 beyond compare(文件比较工具 对编码支持的比较强大) 打开,改下编码,中文就 ...

  8. shell命令一行代码搞定【转】

    查看文件内容-while: cat 1.txt|while read line;do echo $line;done while read line; do echo $line; done < ...

  9. hadoop native

    http://blog.csdn.net/benben85/article/details/4161134 http://stackoverflow.com/questions/19943766/ha ...

  10. C#操作SQLite 报错 (Attempt to write a read-only database)

    解决办法:找到SQLite数据库所在的文件夹,单击右键,属性->安全,为Users用户组添加写入权限.