Building a Dynamic UI with Fragments
自从Android 3.0中引入fragments 的概念,其上的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有 更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。
Fragment的神奇已经在4.0系统之中大显其神威,今天只是做一个入门的知识,大家相互学习哦。
自己也是一个简短的认识过程,在这个认识Fragment 过程中,得到了同事很大帮助,感谢同事的无私分献。
转载请写明出处:
1. Google帮助文档引用:All while continuing to support devices running versions as old as Android 1.6.也就是说最小android版本应设为4.
2. 下载兼容包 android-support-v4.jar (Support Library)更新manifest文件中最小API需求为4.
3. 确保你导入的相关类的包路径是android.support.v4.app相关。
4. 创建自己的Fragment,它类似于Activity有自己的生命周期,创建之后必须实现onCreateView()回调函数来定义布局。
以下是几个比较常用的生命周期方法。
onCreate()
在实现代码中,应当初始化想要在Fragment中保持的必要组件, 当Fragment被暂停或者停止后可以恢复.
onCreateView()
Fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制Fragment的UI,此方法必须返回一个View, 这个View是你的Fragment布局的根View. 如果Fragment不提供UI, 可以返回null.
onPause()
用户将要离开Fragment时,系统调用这个方法作为第一个指示(然而它不总是意味着Fragment将被销毁.) 在当前用户会话结束之前,通常应当在这里提交任何应该持久化的变化(因为用户有可能不会返回).
5. Fragment是依存于Activity的,所以当Activity调用onPause()方法的同时,它将收到信号调用自己的onPause().
6. 一下引用Google帮助文档上的例子来更好的学习和理解Fragment .
activity_main.xml:
activity_main.xml文件中主要是一个承载布局,用于存放切换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"
/>
MainActivity:
MainActivity中继承FragmentActivity实现自定义OnHeadlineSelectedListener接口。使用setContentView(R.layout.activity_main);获取布局。使用:
HeadlinesFragment firstFragment = new HeadlinesFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();来获取FragmentList布局,记得commit
以下是接口中必须实现的方法,大体是获取点击的位置,然后替换相应的Fragment,要想通过返回键返回的主界面,可以调用以下方法实现 transaction.addToBackStack(null);
@Override
public void onHeadlineSelect(int position) {
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
ArticleFragment newFragment = new ArticleFragment();
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
HeadlinesFragment.java:
HeadlinesFragment中的回调方法onAttach方法在onCreate方法之前执行,用于绑定接口。由于MainActivity实现了OnHeadlineSelectedListener,所以可以赋值给mCallback。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ "must be implements OnHeadlineSelectedListener");
}
}
HeadlinesFragment继承于ListFragment,所以可以在onCreate中初始化列表样式。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, Ipsum.Headlines));
}
实现onListItemClick方法,用于获取点击的位置id作为参数,触发自定义事件。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
mCallback.onHeadlineSelect(position);
}
ArticleFragment.java:
主要是用于显示具体内容,获取布局文件中的TextView设置文字。
private void updateArticleView(int position) {
TextView mTextView = (TextView) getActivity()
.findViewById(R.id.article);
mTextView.setText(Ipsum.Articles[position]);
}
具体代码参考详细实例。
http://download.csdn.net/detail/jileshijiedejike/4441401