本人新手,看书和别的大神代码总结出一点点使用方法,和大家分享下。

1.Fragment用法简介
Android3.0引入了Fragment,引入Fragment的初衷是为了适应大屏幕的平板电脑,由于平板电脑屏幕更大,因此能够容纳更多的UI组件,而这些UI组件存在这交互关系。Fragment简化了对大屏幕UI的设计,它不需要开发者管理组件包含关系的复杂变化。Fragment必须嵌入Activity中使用,因此Fragment也有自己的生命周期,而且受它所在的Activity影响。
与创建Activity类似,开发者实现Fragment必须继承Fragment基类。通常来说,创建Fragment需要实现如下三个方法:
onCreate():系统创建Fragement对象后回调该方法。
onCreateView():当Fragment绘制界面的时候调用该方法。
onPause():当用户离开该Fragment是会调用该方法。
下面通过Fragment实现一个图片浏览器。
三张图片,那么我们建三个Fragment来更新Activity界面:
第一个:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;public class FragmentOne extends Fragment{
	public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
		View rootView=inflater.inflate(R.layout.one, container, false);
		((ImageView)rootView.findViewById(R.id.one)).setImageResource(R.drawable.tiger);
		return rootView;
	}
}


第二个:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;public class FragementTwo extends Fragment{
	public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
		View rootView=inflater.inflate(R.layout.one, container, false);
		((ImageView)rootView.findViewById(R.id.two)).setImageResource(R.drawable.cat);
		return rootView;
	}
}


第三个:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;public class FragmentThree extends Fragment{
	public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
		View rootView=inflater.inflate(R.layout.one, container, false);
		((ImageView)rootView.findViewById(R.id.three)).setImageResource(R.drawable.wolf);
		return rootView;
	}
}


每个Fragment的布局是一样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     <ImageView 
        android:id="@+id/one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/></LinearLayout>
然后就是MainActicity的代码:
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {
	int i=0;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button shownext=(Button) findViewById(R.id.shownext);
		FragmentOne one=new FragmentOne();
		FragementTwo two=new FragementTwo();
		FragmentThree three=new FragmentThree();
		final Fragment[] fragment=new Fragment[]{
				one,two,three
		};
		shownext.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				getFragmentManager().beginTransaction().replace(R.id.fragment_show, fragment[(i++)%3]).commit();
			}
		});
	}
}


通过监听这个按钮,来更换Fragment。当然这种方法很直白,但是有一个问题,如果图片很多怎么办,那么我们就讨论下一个问题了。
Fragment与Activity的通信
要实现Fragment与Activity的通信,步骤如下:
1.Fragment获取它所在的Activity,调用getActivity()方法即返回当前Activity。
2.Activity获取它所包含的Fragment,调用Activity的FragmentManager的findFragment(int id)或者findFragmentByTag(String tag)方法即可。
然而,有可能Fragment要和Activity交换信息,所以有:
1.Activity向Fragment发送数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将数据传递给Fragment。
2.Fragment向Activity发送数据或Activity需要在Fragment内部实现时事通信,需要在Fragment中定义一个内部回调接口,再让Fragment的Activity实现该接口即可。
下面我们用更简洁的方法来实现:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;public class MyFragment extends Fragment{
	public static final String KEY="key";
	int id;
	int[] images=new int[]{
			R.drawable.cat,R.drawable.tiger,R.drawable.wolf
	};
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		if(getArguments().containsKey(KEY)){
			id=getArguments().getInt(KEY);
		}
	}
	public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
		View rootView=inflater.inflate(R.layout.fragment_view, container, false);
		((ImageView)rootView.findViewById(R.id.show)).setImageResource(images[id]);
		return rootView;
	}
}


这次我们只需要一个Fragment,通过Activity发来的信息改变Fragment上的组件。
这个是Fragment的布局界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>"</LinearLayout>


下边是MainActivity的代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {
	int i=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button next=(Button) findViewById(R.id.next);
        next.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Bundle bundle=new Bundle();
				bundle.putInt(MyFragment.KEY, (i++)%3);
				MyFragment fragment=new MyFragment();
				fragment.setArguments(bundle);
				getFragmentManager().beginTransaction().replace(R.id.showfragment, fragment).commit();
			}
        });
    }
}


然后就是MainActivity的布局界面代码,比较简单:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.fragmentsendmsg.MainActivity" >
	<FrameLayout 
	    android:id="@+id/showfragment"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    />
	<Button
	    android:id="@+id/next"
	    android:layout_alignParentBottom="true"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="NEXT"/>"</RelativeLayout>


两段代码实现了完全相同的功能,明显第二种方法更加简单,以后我们可视情况选择。

fragment使用SmartRefreshLayout fragment的应用_ide

fragment使用SmartRefreshLayout fragment的应用_android_02

fragment使用SmartRefreshLayout fragment的应用_android_03