Building a Dynamic UI with Fragments

                                                                              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第一次绘制它的用户界面的时候系统会调用此方法为了绘制FragmentUI,此方法必须返回一个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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值