神马是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-sdk
android: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的类MyTestaActivity、MyTestbActivity进行加载显示,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;
}
}