使用Fragment创建一个动态UI - 与其他Fragment通信
来源:互联网 发布:编程老师工资待遇 编辑:程序博客网 时间:2024/06/05 21:13
转载自:http://blog.csdn.net/lixiang0522/article/details/7861924
为了能重复使用碎片UI组件,你需要创建一个完全独立,模块化的组件,这个组件可以定义自己的样式和行为。一旦你定义了一个可重用的碎片,你可以使用一个activity关联它们,通过程序逻辑链接它们成为一个完整的组合UI。
通常你希望碎片间可以通信,比如基于用户事件改变内容。所有碎片间的通信都是通过activity实现,两个碎片不能直接通信。
定义一个接口
为了实现碎片和activity的通信,你可以在碎片类中定义一个接口,然后在activity中实现这个接口。碎片可以在onAttach()生命周期函数中取得接口的实现,然后调用接口方法实现通信。
这里是一个碎片和activity通信的例子:
public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; // Activity容器必须实现这个接口 public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // 确保activity实现了接口回调,不然抛出一个异常 try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } ...}
现在碎片可以使用OnHeadloneSelectedListener接口的mCallback实例调用onArticleSelected()函数(或者接口中其他函数)发送信息给activity了。
例如,当用户点击list选项时,碎片中的下面这个方法会被调用。碎片使用回调接口发送事件给父类activity。
@Override public void onListItemClick(ListView l, View v, int position, long id) { // Send the event to the host activity mCallback.onArticleSelected(position); }
实现接口
为了从碎片中接收事件回调,拥有这个碎片的activity必须实现定义在碎片类中的接口。
例如,下面的代码实现了上面例子中定义的接口:
public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(Uri articleUri) { // The user selected the headline of an article from the HeadlinesFragment // Do something here to display that article }}
发送一个信息给碎片
通过findFragmentById()取得Fragment实例,然后activity就可以直接调用碎片的公共函数发送信息给这个fragment。
例如,上面的函数让activity显示了一个碎片选项的数据,activity也可以通过信息接收函数去显示其他碎片数据:
public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(int position) { // 用户从文章标题碎片选择标题 // 这里可以写一些显示文章的代码 ArticleFragment articleFrag = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment); if (articleFrag != null) { // 如果是文章显示页面碎片 // 呼叫一个更新内容的方法 articleFrag.updateArticleView(position); } else { // 否则我们在第一个布局页面 // 创建一个碎片,给选择项传递一个参数 ArticleFragment newFragment = new ArticleFragment(); Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // 替换碎片的内容, // 添加改变到回退堆栈,以便用户返回 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // 提交更改 transaction.commit(); } }}
0 0
- 使用Fragment创建一个动态UI - 与其他Fragment通信
- Training--使用Fragment创建动态UI(3)-- 与其他Fragment通信
- 安卓训练-开始-使用 Fragment 构造动态 UI-与其他 Fragment 通信
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互
- Android Training - 使用碎片创建一个动态UI(4) - 与其他碎片通信
- 使用Fragment创建动态UI
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信
- 利用Fragment创建动态UI 之 Fragment之间的通信
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之创建一个Fragment
- 利用Fragment创建动态UI 之 创建一个Fragment
- Training--使用Fragment创建动态UI(1)-- 创建一个Fragment
- Training--使用Fragment创建动态UI
- [Android] 使用Fragment创建动态UI
- Training--使用Fragment创建动态UI(2)--构建一个灵活的UI
- 5.3 与其他Fragment交互
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之使用Support Library
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之创建一个灵活的UI
- Android Studio的常见错误
- java图形绘制
- Twig模板继承
- Android 2D翻转动画效果的实现
- Rust 1.10 发布
- 使用Fragment创建一个动态UI - 与其他Fragment通信
- JS错误类型的学习
- maven安装以及maven的相关知识
- 取消TableViewCell的选中状态
- Ajax的跨域访问
- http get 请求
- Java中重载和重写的区别
- Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理
- 让webstorm不加载node_modules文件