编写最简单的Fragment

50
回复
1469957
查看
  [复制链接]

206

主题

1622

帖子

2721

安币

Android大神

Rank: 6Rank: 6

发表于 2011-11-10 13:29:14 | 显示全部楼层 |阅读模式

3月3日,Android发布了《Fragment For All》,标明Android为兼容各个低版本(最低1.6)做出了实质性的行动。

Fragment API类似iOS的Split View。另外,看过Fragment API以后,觉得应该也可以实现iOS的Popover。split view可见这里。popover可见简单的popover

在Android 2.3.2上测试了Fragment的简单使用。效果如下:

模拟了split view的使用。

代码实现是非常简单的。但是android的文档没有跟上,造成上手时容易出现各种问题。可见发布还是很仓促的。

首先,需要通过Adnroid SDK update,更新Android兼容包。

然后,将Android SDK下面目录的文件:

  1. extras/android/compatibility/v4/android-support-v4.jar
复制代码
复制到Eclipse ADT项目中,然后再设置到classpath中:再然后,就要开始写代码了。这时需要注意,Android官方文档是写给3.0的。直接引用将报错,比如ClassNotFoundException等。我尝试成功的方式是,通过编程来实现布局。(直接用fragment标签做布局会报错,可能是因为编译的时候不能加载android-support-v4包,或者是因为包名问题。)首先要注意,实现的Activity必须是继承:FragmentActivity。而3.0不需要,因为3.0将比如getFragmentManager()方法已经加入到Activity中了。而3.0以前版本要通过继承FragmentActivity获得类似功能。
  1. public class FragmentDemoActivity extends FragmentActivity {
复制代码
编写主布局文件:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="horizontal" android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent" android:id="@+id/rootView">
  5.     <LinearLayout android:id="@+id/leftView"
  6.         android:orientation="vertical" android:layout_width="0dp"
  7.         android:layout_weight="1" android:layout_height="fill_parent"
  8.         android:background="#c0c0c0c0"/>
  9.     <LinearLayout android:id="@+id/rightView"
  10.         android:orientation="vertical" android:layout_width="0dp"
  11.         android:layout_weight="2" android:layout_height="fill_parent" />
  12. </LinearLayout>
复制代码
这样写是变通的做法,因为不能按照官方示例直接用fragment标签。编写左侧视图的布局:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="fill_parent" android:layout_height="wrap_content"
  4.     android:text="demo left fragment" />
复制代码
右侧类似,也是TextView。编写Fragment实现类。比如左侧的:
  1. package com.easymorse.demos;

  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;

  7. public class DemoLeftFragment extends Fragment {
  8.     @Override
  9.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  10.             Bundle savedInstanceState) {
  11.         return inflater.inflate(R.layout.demo_left_fragment, container,false);
  12.     }
  13. }
复制代码
在onCreateView方法中加入了上面的左侧视图。右侧类似。在Activity类中将两个Fragment集成起来:
  1. public void onCreate(Bundle savedInstanceState) {
  2.     super.onCreate(savedInstanceState);
  3.     setContentView(R.layout.main);

  4.     FragmentManager fragmentManager=getSupportFragmentManager();
  5.     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  6.     DemoLeftFragment leftFragment=new DemoLeftFragment();
  7.     DemoRightFramgment rightFramgment=new DemoRightFramgment();
  8.     fragmentTransaction.add(R.id.leftView, leftFragment);
  9.     fragmentTransaction.add(R.id.rightView, rightFramgment);
  10.     fragmentTransaction.commit();
  11. }
复制代码
以上源代码见:目前代码还有bug,主要是需要对fragment生命周期学习了解。因为代码在锁屏解锁后,会出现类似:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

51

帖子

37

安币

程序猿

Rank: 2

发表于 2011-11-11 09:50:06 | 显示全部楼层
学习 !!!!!!!!!!!

2

主题

187

帖子

17

安币

初级码农

IT男

Rank: 1

QQ达人

QQ
发表于 2011-11-14 21:35:44 | 显示全部楼层
不错!学习之!
努力!!!

0

主题

25

帖子

62

安币

程序猿

Rank: 2

发表于 2011-11-16 15:32:19 | 显示全部楼层
++{:soso_e121:}

2

主题

92

帖子

360

安币

攻城狮

Rank: 3Rank: 3

发表于 2011-12-20 11:16:28 | 显示全部楼层
{:soso_e100:}fc

0

主题

0

帖子

8

安币

初级码农

Rank: 1

发表于 2012-1-31 11:01:23 | 显示全部楼层
+1{:soso_e100:}

0

主题

11

帖子

35

安币

初级码农

Rank: 1

QQ达人

发表于 2012-5-23 15:56:35 | 显示全部楼层
{:soso_e100:}+1

1

主题

54

帖子

164

安币

程序猿

Rank: 2

QQ达人

发表于 2012-6-7 14:52:08 | 显示全部楼层
看看{:soso_e100:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )