Android中的Fragment使用详解之页面加载

静态加载

1、Fragment布局

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
  3. android:layout_width='match_parent'
  4. android:layout_height='match_parent'
  5. android:orientation='vertical' >
  6. <TextView
  7. android:id='@+id/textView1'
  8. android:layout_width='wrap_content'
  9. android:layout_height='wrap_content'
  10. android:text='TextView' />
  11. <Button
  12. android:id='@+id/button1'
  13. android:layout_width='wrap_content'
  14. android:layout_height='wrap_content'
  15. android:text='Button' />
  16. </LinearLayout>

2、编写我的MyFragment

  1. package com.cx.testdemo;
  2. import android.annotation.SuppressLint;
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. @SuppressLint('NewApi')
  10. public class MyFragment extends Fragment {
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  13. Bundle savedInstanceState) {
  14. // layout文件转化为View对象(需要加载的布局文件,加载layout的父ViewGroup,是否返回父窗体ViewGroup)
  15. View view = inflater.inflate(R.layout.fragment, container, false);
  16. TextView textView = (TextView) view.findViewById(R.id.textView1);
  17. textView.setText('静态加载');
  18. return view;
  19. }
  20. }

注意:在引入jar包时要引入import android.app.Fragment;,不能引入import android.support.v4.app.Fragment;。引入后者时,代码不会报错,但运行时报错。
3、在Activity的布局中使用MyFragment

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
  3. android:layout_width='match_parent'
  4. android:layout_height='match_parent'
  5. android:orientation='vertical' >
  6. <fragment
  7. android:id='@+id/fragment'
  8. android:layout_width='wrap_content'
  9. android:layout_height='wrap_content'
  10. android:name='com.cx.testdemo.MyFragment'/>
  11. </LinearLayout>

注意:一定要加id属性,虽然在其他地方用不到。

4、在Activity中使用

  1. package com.cx.testdemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.Button;
  7. import android.widget.TextView;
  8. public class MainActivity2 extends Activity {
  9. private TextView textView;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. // TODO Auto-generated method stub
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main2);
  15. //直接使用fragment布局文件中的Button。静态加载特点,在Activity中对Fragment中的控件进行改变。
  16. Button button = (Button) findViewById(R.id.button1);
  17. textView = (TextView) findViewById(R.id.textView1);
  18. button.setOnClickListener(new OnClickListener() {
  19. @Override
  20. public void onClick(View v) {
  21. // TODO Auto-generated method stub
  22. textView.setText('改变');
  23. }
  24. });
  25. }
  26. }

动态加载

动态加载的前两步与静态加载相同,这里直接从第三步开始
3、Activity的布局文件中将上面3中布局的fragment换成LinearLayout
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
  3. android:layout_width='match_parent'
  4. android:layout_height='match_parent'
  5. android:orientation='vertical' >
  6. <LinearLayout
  7. android:id='@+id/frame'
  8. android:layout_width='match_parent'
  9. android:layout_height='wrap_content'
  10. android:orientation='vertical' >
  11. </LinearLayout>
  12. </LinearLayout>

4、在Activity中动态加载fragment

  1. package com.cx.testdemo;
  2. /*
  3. * 动态加载
  4. */
  5. import android.app.Activity;
  6. import android.app.FragmentManager;
  7. import android.app.FragmentTransaction;
  8. import android.os.Bundle;
  9. public class MainActivity2 extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. // TODO Auto-generated method stub
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main2);
  15. MyFragment2 fragment2 = new MyFragment2();
  16. //获取Fragment管理者
  17. FragmentManager fragmentManager = getFragmentManager();
  18. //通过Fragment管理者开启一个事务的对象
  19. FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
  20. //(添加到的布局id,Fragment)
  21. beginTransaction.add(R.id.frame, fragment2);
  22. //返回键回退效果
  23. beginTransaction.addToBackStack(null);
  24. beginTransaction.commit();
  25. }
  26. }

(0)

相关推荐