Fragment的用法(2)
2016-03-12 08:18
330 查看
继我的上一篇博客: Fragment的用法(1)
可以看出,活动(Activity)和碎片(Fragment)都是建立在不同的类中,那么活动和碎片该怎么进行信息交流呢?例如,Fragment该怎么调用Activity类中的方法呢?
其实思路很简单,以上一篇博客的代码为基础,来实现活动与碎片之间的通信。
修改activity_main.xml文件,为之添加一个Button,用于调用FragmentFirst中的方法。
为fragment_ first.xml添加一个新的Button,用于调用activity_ main中的方法。
分别为MainActivity和FragmentFirst增加一个hint(Context context)方法,用于弹出一个吐司证明方法被调用了。
然后,这里先来修改一处小地方。在上一篇博客中,在向MainActivity增添FragmentFirst时,我们调用的是以下方法
这里我们要调用add方法的另一个重载函数,为FragmentFirst实例指定一个标志”first_fragment”,方便之后获取FragmentFirst实例。
之后就要来思考如何从MainActivity当中调用FragmentFirst中的方法了。
其实,FragmentManager提供了一个类似于findViewById()的方法,用于获取Fragment实例。
在onCreate方法中增添如下代码:
可以看到,findFragmentByTag(“first_ fragment”)中的”first_ fragment”即为之前指定的标志,通过它就获取到了FragmentFirst实例,并调用了hint方法。
运行程序,点击第一个按钮,就可以看到FragmentFirst中的hint方法被调用的提示了。
在FragmentFirst中调用MainActivity中的函数的方法类似。
在FragmentFirst中的onCreate方法增添如下代码:
通过getActivity()方法获取与当前Fragment关联的Activity,点击第三个按钮,就可以调用hint方法了。
可以看出,活动(Activity)和碎片(Fragment)都是建立在不同的类中,那么活动和碎片该怎么进行信息交流呢?例如,Fragment该怎么调用Activity类中的方法呢?
其实思路很简单,以上一篇博客的代码为基础,来实现活动与碎片之间的通信。
修改activity_main.xml文件,为之添加一个Button,用于调用FragmentFirst中的方法。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.fragmenttest.MainActivity" > <Button android:id="@+id/main_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="调用fragment_first的hint方法" /> </LinearLayout>
为fragment_ first.xml添加一个新的Button,用于调用activity_ main中的方法。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="这是第一个Fragment" android:textSize="20dp" /> <Button android:id="@+id/showAnotherFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:text="跳转到另一个Fragment" android:textSize="20dp" /> <Button android:id="@+id/first_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="调用activity_main的hint方法" /> </LinearLayout>
分别为MainActivity和FragmentFirst增加一个hint(Context context)方法,用于弹出一个吐司证明方法被调用了。
public void hint(Context context) { Toast.makeText(context, "MainActivity 的hint方法被调用", Toast.LENGTH_SHORT).show(); }
public void hint(Context context) { Toast.makeText(context, "FragmentFirst 的hint方法被调用", Toast.LENGTH_SHORT).show(); }
然后,这里先来修改一处小地方。在上一篇博客中,在向MainActivity增添FragmentFirst时,我们调用的是以下方法
getFragmentManager().beginTransaction().add(R.id.main_layout, new FragmentFirst()).commit();
这里我们要调用add方法的另一个重载函数,为FragmentFirst实例指定一个标志”first_fragment”,方便之后获取FragmentFirst实例。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState==null) { getFragmentManager().beginTransaction() .add(R.id.main_layout, new FragmentFirst(),"first_fragment") .commit(); } }
之后就要来思考如何从MainActivity当中调用FragmentFirst中的方法了。
其实,FragmentManager提供了一个类似于findViewById()的方法,用于获取Fragment实例。
在onCreate方法中增添如下代码:
findViewById(R.id.main_button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FragmentFirst first = (FragmentFirst) getFragmentManager().findFragmentByTag("first_fragment"); first.hint(MainActivity.this); } });
可以看到,findFragmentByTag(“first_ fragment”)中的”first_ fragment”即为之前指定的标志,通过它就获取到了FragmentFirst实例,并调用了hint方法。
运行程序,点击第一个按钮,就可以看到FragmentFirst中的hint方法被调用的提示了。
在FragmentFirst中调用MainActivity中的函数的方法类似。
在FragmentFirst中的onCreate方法增添如下代码:
@Override public void onClick(View v) { MainActivity main = (MainActivity) getActivity(); main.hint(getActivity()); } });
通过getActivity()方法获取与当前Fragment关联的Activity,点击第三个按钮,就可以调用hint方法了。
相关文章推荐
- MiniDao-PE精简版
- MiniDao普通项目集成方案
- LeetCode "Reconstruct Itinerary" !
- Ext.Net 布局
- 循环 wxl
- Redhatlinux6.0_64位双网卡绑定脚本
- MVC MVP MVVM三种通讯方式
- VI cacti
- HDU 1003 Max Sum
- JavaScript开发者必备的10个sublime的插件
- 2014-8-10 掉落不简单
- char data[0]在struct末尾的用法
- 64.广搜练习跳马问题
- 64.广搜练习跳马问题
- 64.广搜练习跳马问题
- 64.广搜练习跳马问题
- 【索引】读书笔记-代码大全
- .net破解一(反编译,反混淆-剥壳,工具推荐)
- C#使用Dotfuscator混淆代码的加密方法
- 日经春秋 20160312