Android_Fragment

来源:互联网 发布:身份证登记软件 编辑:程序博客网 时间:2024/06/13 08:05

1. Fragment与Activity之间的关系
Fragment,碎片,提出最初是为了解决平板和手机屏幕大小不同,设计布局的问题,fragment通过Fragment Manager由Activity进行托管,可以根据屏幕大小不同的客户端加载不同的fragment.通俗的说,fragment就是为保证UI在不同大小屏幕上的兼容性而生的。
2. (视图层)Fragment.xml与Activity.xml之间的关系
首先,既然说是布局,那么fragment必不可少的就是布局文件,但是想要对控件进行操作,单单有一个布局是不够的,还需要布局中有各种控件。此处,本质上可以理解为,main_activity.xml文件创建容器,容器中填充的就是fragment.xml文件内容。main_activity.xml文件仅仅只是提供了一个空白的画板而已。所有的控件都包含在fragment.xml中。

//在布局文件中添加碎片<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" >    <fragment    android:id="@+id/left_fragment"    android:name="com.example.fragmenttest.LeftFragment"    android:layout_width="0dp"    android:layout_height="match_parent"    android:layout_weight="1" />    <fragment    android:id="@+id/right_fragment"    android:name="com.example.fragmenttest.RightFragment"    android:layout_width="0dp"    android:layout_height="match_parent"    android:layout_weight="1" /></LinearLayout>//注意这里需要通过android:name 属性来显式指明要添加的碎片类名,注意一定要将类的包名也加上。

3 (控制层)Fragment.java与MainActivity.java之间的关系

在活动运行时自动将碎片添加到活动中,MainActivity.java加载碎片,然后对于控件的各种操作均在Fragment.java中完成

这里可以对比下调用下一个Activity和加载碎片的区别。
从代码上来区分

Intent intent=new Intent(MainActivity.this,firstActivity.class);startActivity(intent);

而动态加载碎片是比较复杂的,包括五个步骤:
(1)创建待添加的碎片
(2)获取FragmentManager(),在活动中可以直接调用getFragmentManager()方法得到
(3)开启一个事务,通过调用beginTransaction()方法开启。
(4)向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id 和待添加的碎片实例。
(5)提交事务,调用commit()方法来完成。
例子:

public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button:AnotherRightFragment fragment = new AnotherRightFragment();FragmentManager fragmentManager = getFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.replace(R.id.right_layout, fragment);transaction.commit();break;default:break;}}}
原创粉丝点击