Fragment之简介

本文介绍了Fragment的概念、使用方法、生命周期以及一个简单的实例。Fragment是Android为适应不同分辨率屏幕而设计的一种组件,用于在较大尺寸屏幕上灵活管理多个UI操作。通过支持库,开发者可以轻松地在3.0及以下版本的Android系统中使用Fragment。文中还提供了Fragment的生命周期、一个具体的实例代码以及如何通过Fragment实现UI切换的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

神马是Fragment

Fragment的中文意思是碎片、片段,是为了在不同分辨率下灵活适应各种UI控件之间的交互而生的,最常用在一些较大尺寸屏幕上便于动态管理多个UI操作。当view的复用性较多的情况下我们可以通过使用Fragment来提高我们的

1、使用支持库

如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容。

如果您的应用使用在3.0以下、1.6及以上的版本,需要使用支持库来构建。

使用支持库的步骤:

使用SDK下的SDK Manager工具下载Android Support Package

 2. 在您的Android工程的顶级目录下创建一个libs目录

3. 找到您的SDK下的/extras/android/support/v4/android-support-v4.jar,并且拷贝到您的项目的libs下,选中这个jar包 → 右键 → Build Path → Add to Build Path

4.在您的项目的Manifest.xml文件的<manifest>标签下添加:

<uses-sdkandroid:minSdkVersion="4"

  android:targetSdkVersion="8"/>

  其中targetSdkVersion是您的软件最小支持的版本

5.如果您的项目支持3.0以下的版本,请导入如下的包:android.support.v4.*;

在使用Fragment的Activity请继承FragmentActivity而不是Activity。如果您的系统是3.0或以上版本,同样需要导入类似的包,但是可以使用普通的Activity。

2、设计理念截图:

 

3、生命周期:

4、实例:

MainActivity.java   主要实现了对继承Fragment的类MyTestaActivityMyTestbActivity进行加载显示FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作。

package com.example.myfragmentdemo;

import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ParentActivity {
    private Fragment mtestaFragment;
    private Fragment mtestbFragment;
    private Button mtestaBtn;
    private Button mtestbBtn;
    private FragmentTransaction mfratran;
    private FragmentManager mframa;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mframa = getSupportFragmentManager();  
         findView();
    }

    private void findView(){
         mtestaFragment = mframa.findFragmentById(R.id.fragment1);
        mtestbFragment = mframa.findFragmentById(R.id.fragment2);
        mtestaBtn = (Button)findViewById(R.id.button1);
        mtestbBtn = (Button)findViewById(R.id.button2);
        setlistener(mtestaBtn,mtestaFragment);
        setlistener(mtestbBtn,mtestbFragment);
     }

    private void setlistener(final Button btn,final Fragment fragment){
 
        btn.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                mfratran = getSupportFragmentManager().beginTransaction();  

                if (fragment.isHidden()) {  
                    mfratran.show(fragment);  
                    btn.setText("隐藏");  
                } else {  
                    mfratran.hide(fragment);  
                    btn.setText("显示");  
                }  
                mfratran.commit();  
            }
        });
    }
}



    ParentActivity.java    本人主要写这个类是为了在setContentView中获取继承  ParentActivity类的FragmentActivity当前布局id,根据布局id将自定义的headbar嵌入顶部。这样操作的话,便于全局统筹管控复用view,大大的降低冗余性。

package com.example.myfragmentdemo;

import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.view.ViewGroup;

public class ParentActivity extends FragmentActivity {
 	private LayoutInflater inflater;
	private View contentView;
	private FrameLayout root;
	private LayoutParams iabParams;
	private LinearLayout layout;
 	private HeadBar mheadbar;
	
	@Override
	public void setContentView(int layoutResID) {
		layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);
		inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		root = (FrameLayout) findViewById(android.R.id.content);

		mheadbar = new HeadBar(this);
		iabParams = new LayoutParams();
		iabParams.width = LayoutParams.MATCH_PARENT;
		iabParams.height = LayoutParams.WRAP_CONTENT;
		layout.addView(mheadbar, iabParams);

		contentView = inflater.inflate(layoutResID, null);
		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.MATCH_PARENT,
				LinearLayout.LayoutParams.MATCH_PARENT);
		layout.addView(contentView, params);

		setContentView(layout);
 	}
}



    MyTestaActivity.java

package com.example.myfragmentdemo;


import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MyTestaActivity extends Fragment  {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.testb_main, container, false);  
		return v;  
	}

}

    MyTestbActivity.java

package com.example.myfragmentdemo;


import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MyTestbActivity extends Fragment  {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.testb_main, container, false);  
		return v;  
	}

}








 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值