Android学习--《Fragment》
来源:互联网 发布:全球人工智能产业规模 编辑:程序博客网 时间:2024/04/30 15:17
概要:
fragment可以看作是一个子acitity,它具有自己的生命周期,与输入事件
可以在不同的activity里复用,是activity模块化的一部分 可重用,模块化的UI组件
创建:
必须重写的回调方法 onCreateView(), 用来定义布局
示例:
import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.ViewGroup;public class ArticleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.article_view, container, false); }}
添加
添加fragment到一个activity中有两种方法,一种是静态添加的,一种是动态的
静态添加
就是通过xml文件添加到布局中,但是这样无法对fragment进行操作
动态添加
FragmentManager 类在 Activity 运行时 对 Fragment 进行添加,移除,替换
FragmentManager => (beginTransation()) 创建一个FargmentTransation => (add()) 添加一个Fragment
Tips:
- 我们需要设置一个空的View作为fragment的容器,如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" />
- 我们通过FragmentTransation进行多级事务后,要 通过
commits()
提交
//以下代码要写在 A次vity 的 onCreated() 方法里// Create a new Fragment to be placed in the activity layout HeadlinesFragment firstFragment = new HeadlinesFragment(); // In case this activity was started with special instructions from an // Intent, pass the Intent's extras to the fragment as arguments firstFragment.setArguments(getIntent().getExtras()); // Add the fragment to the 'fragment_container' FrameLayout getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, firstFragment).commit(); //最后commit()
replace()只要将add()替换就可以完成了。
注意:移除和替换后,我们要让用户可以向前撤销这次操作,那么在commit前,就必须调用 addToBackStack() 方法
Fragment之间的交互
Fragment之间是不应该交互的,但是可以通过宿主activity来进行间接的交互
那么Fragment和activity之间如何交互呢?
第一种情况:Fragment到Activity
大概流程:
- 在fragment里定义一个接口 A
- 在acivity中实现这个接口,(implent A)
- 在fragment的onAttach()方法中获取接口的方法,然后调用接口方法来和activity交互
这个过程还是看代码回更加清晰一些:
//在fragment中定义接口public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; // Container Activity must implement this interface public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } ...}
之后fragment中任何地方都可以使用 mCallback.onArticleSelected(position)来调用activity中实现的此方法
当然activity中怎么实现就随意了
0 0
- Android Fragment学习笔记
- android fragment学习笔记
- android Fragment demo学习
- android Fragment demo学习
- Android学习之 Fragment
- android学习Fragment小计
- 学习笔记 android fragment
- android Fragment 学习笔记
- Android Fragment 学习<1>
- android Fragment学习
- Android Fragment组件学习
- Android学习笔记 - fragment
- Android Fragment学习总结
- Android Fragment学习
- android fragment学习总结
- android学习-----Fragment
- Android Fragment 组件学习
- Android学习--viewpager+ Fragment
- LintCode:图中两个点之间的路线
- nyoj 1023 还是回文 (区间dp加贪心)
- PHP数组函数基础知识
- HDU 1175 练练看
- 如何对ZBrush中面部进行快速布线
- Android学习--《Fragment》
- 【客户端】windows c++ 检查图像文件是否有效(Check if file is valid image)
- 互斥锁、条件变量:生产者消费者问题
- AndroidStudio添加导入一个AndroidStudio工程作为一个Library
- java进阶书籍推荐(不包括基础)
- gcc & makefile
- iOS版本更新提示
- windows 64位使用redis
- setTimeout() 和setInterval()函数的比较