Android_Fragment

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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public 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;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值