Fragment(加载与通信)

//Fragmenty有自己的生命周期,但会受到宿主Activity生命周期的影响。

//Fragmenty作为Activity界面的组成部分,可以调用getActivity()方法获取他所在的Activity,Activity可以调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment

//可以通过FragmentManager fragmentManager = getFragmentManager();//获得管理者
            FragmentTransaction beginTransaction = fragmentManager.beginTransaction();开启一个事物,之后就可以对Fragment进行添加,替换,移除等操作。
            beginTransaction.add(R.id.frame, fragment2);//可以将fragment添加到指定的布局中

           beginTransaction.commit();//记得提交

1.fragment的静态加载

主布局文件main

每个按钮的点击背景效果可以通过选择器文件实现

android:background="@drawable/radio_pressed

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>



    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/first"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/radio_pressed"
            android:button="@null"
            android:drawableTop="@drawable/ic_launcher"
            android:gravity="center_horizontal"
            android:text="静态加载" />

        <RadioButton
            android:id="@+id/second"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/radio_pressed"
            android:button="@null"
            android:drawableTop="@drawable/ic_launcher"
            android:gravity="center_horizontal"
            android:text="动态加载" />

        <RadioButton
            android:id="@+id/thrid"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/radio_pressed"
            android:button="@null"
            android:drawableTop="@drawable/ic_launcher"
            android:gravity="center_horizontal"
            android:text="生命周期" />

        <RadioButton
            android:id="@+id/fourth"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/radio_pressed"
            android:button="@null"
            android:drawableTop="@drawable/ic_launcher"
            android:gravity="center_horizontal"
            android:text="传值通信" />
    </RadioGroup>

</RelativeLayout>



public class MainActivity extends Activity implements OnCheckedChangeListener
 {

	private RadioGroup group;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		group = (RadioGroup) findViewById(R.id.radiogroup);
		group.setOnCheckedChangeListener(this);

	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		// TODO Auto-generated method stub

		switch (checkedId) {
		case R.id.first: {
            Intent intent=new  Intent(this,MainActivity2.class);
            startActivity(intent);
			break;

		}
		case R.id.second: {
            MyFragment2 fragment2=new MyFragment2();
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
            beginTransaction.add(R.id.frame, fragment2);
            beginTransaction.addToBackStack(null);
            beginTransaction.commit();
			break;
		}
		case R.id.thrid: {
            Intent intent=new Intent(MainActivity.this,MainActivity3.class);
            startActivity(intent);

			break;
		}
		case R.id.fourth: {
			Intent intent=new Intent(MainActivity.this,MainActivity4.class);
            startActivity(intent);

			break;
		 }
		}
	}


	

	

}

MainActivity2文件

public class MainActivity2 extends Activity{

	
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main2);
		Button button=(Button) findViewById(R.id.button);
		tv=(TextView) findViewById(R.id.text);
		button.setText("改变");
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				tv.setText("TextView改变了");
			}
		});
		
	}
}

布局文件main2

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.example.android_fragment.MyFragment"
        />

</LinearLayout>
文件MyFragment

public class MyFragment extends Fragment{
	
	private String aaa;
	
	
	public String getAaa() {
		return aaa;
	}


	public void setAaa(String aaa) {
		this.aaa = aaa;
	}


	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		//layout布局文件转换成View对象
		/**
		 * resource:Fragment需要加载的布局文件
		 * root:加载layout的父ViewGroup
		 * attactToRoot:false,不返回父ViewGroup
		 */
		View view = inflater.inflate(R.layout.fragment, container, false);
		TextView text=(TextView) view.findViewById(R.id.text);
		Button button=(Button) view.findViewById(R.id.button);
		text.setText("静态加载Fragment");
		button.setText("获取内容");
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String value = getAaa();
				Toast.makeText(getActivity(), "value="+value, Toast.LENGTH_SHORT).show();
			}
		});
		return view;
	}

}


布局文件fragment

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"/>
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"/>

</LinearLayout>

实现了静态加载


动态加载

//重新创建一个Fragment,让其还是加载布局文件fragment

通过FragmentManager fragmentManager = getFragmentManager();//获得管理者
            FragmentTransaction beginTransaction = fragmentManager.beginTransaction();开启一个事物,之后就可以对Fragment进行添加,替换,移除等操作。
            beginTransaction.add(R.id.frame, fragment2);//可以将fragment添加到指定的布局中

            beginTransaction.commit();//提交


生命周期

//新建MainActivity3和MyFragment3和MyFragment4进行生命周期的测试

public class MainActivity3 extends Activity {

	private Button button;
	private Fragment frag;
	private boolean flag = true;

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main3);
		init();
		button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				FragmentManager fragmentManager = getFragmentManager();
				FragmentTransaction beginTransaction = fragmentManager
						.beginTransaction();
				
				if (flag) {
					MyFragment4 frag4=new MyFragment4();
					beginTransaction.replace(R.id.layout, frag4);
					flag=false;

				} else {
					MyFragment3 frag3=new MyFragment3();
					beginTransaction.replace(R.id.layout, frag3);
					flag=true;

				}
				
			   beginTransaction.commit();
			}
		});

	}

	private void init() {
		// TODO Auto-generated method stub

		FragmentManager fragmentManager = getFragmentManager();
		FragmentTransaction beginTransaction = fragmentManager
				.beginTransaction();
		MyFragment3 frag3 = new MyFragment3();
		beginTransaction.add(R.id.layout,frag3);
		beginTransaction.commit();
	}

}

布局文件main3

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:text="切换Fragment"
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </Button>

</LinearLayout>

MyFragment3和MyFragment4

public class MyFragment3 extends Fragment{

	@Override
	//每次创建都会绘制Fragment的View组件时回调该方法
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		//layout布局文件转换成View对象
				/**
				 * resource:Fragment需要加载的布局文件
				 * root:加载layout的父ViewGroup
				 * attactToRoot:false,不返回父ViewGroup
				 */
				View view = inflater.inflate(R.layout.fragment2, container, false);
				TextView tv = (TextView) view.findViewById(R.id.text);
				tv.setText("第一个Fragment");
				Log.i("Main", "Fragment1---onCreateView()");
				return view;
		
	}
	//当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		super.onAttach(activity);
		Log.i("Main", "Fragment1---onAttach()");

	}

	//创建Fragment时会回调,只会调用一次
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		Log.i("Main", "Fragment1---onCreate()");

	}

	//当Fragment所在的Activty启动完成后调用
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
		Log.i("Main", "Fragment1---onActivityCreated()");

	}

	//启动Fragment
	@Override
	public void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i("Main", "Fragment1---onStart()");

	}

	//恢复Fragment时会被回调,调用onStart()方法后面一定会调用onResume()方法
	@Override
	public void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("Main", "Fragment1---onResume()");

	}

	//暂停Fragment
	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i("Main", "Fragment1---onPause()");

	}

	//停止Fragment
	@Override
	public void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("Main", "Fragment1---onStop()");

	}

	//销毁Fragment所包含的View组件时
	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		super.onDestroyView();
		Log.i("Main", "Fragment1---onDestroyView()");

	}

	//销毁Fragment时会被回调
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("Main", "Fragment1---onDestroy()");

	}

	//Fragment从Activity中删除时会回调该方法,并且这个方法只会调用一次
	@Override
	public void onDetach() {
		// TODO Auto-generated method stub
		super.onDetach();
		Log.i("Main", "Fragment1---onDetach()");
	}
}

public class MyFragment4 extends Fragment {

	private TextView tv;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment2, container, false);
		TextView tv = (TextView) view.findViewById(R.id.text);
		tv.setText("第二个Fragment");
		Log.i("Main", "Fragment2---onCreateView()");
		return view;
	}

	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		super.onAttach(activity);
		Log.i("Main", "Fragment2---onAttach()");
	
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		Log.i("Main", "Fragment2---onCreate()");

	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
		Log.i("Main", "Fragment2---onActivityCreated()");
	
	}

	@Override
	public void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i("Main", "Fragment2---onStart()");
	
	}

	@Override
	public void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("Main", "Fragment2---onResume()");
		
	}
	
	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i("Main", "Fragment2---onPause()");
	
	}
	
	@Override
	public void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("Main", "Fragment2---onStop()");
		
	}
	
	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		super.onDestroyView();
		Log.i("Main", "Fragment2---onDestroyView()");

	}
	
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("Main", "Fragment2---onDestroy()");
	
	}
	
	@Override
	public void onDetach() {
		// TODO Auto-generated method stub
		super.onDetach();
		Log.i("Main", "Fragment2---onDetach()");
	}
}


fragment与Activity通信

MainActivity4

public class MainActivity4 extends Activity implements MyListener {

	private EditText editext;
	private Button send;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main4);
		editext = (EditText) findViewById(R.id.editText);
		send = (Button) findViewById(R.id.send);
		
		
		send.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String text = editext.getText().toString();
				MyFragment5 fragment5 = new MyFragment5();
				Bundle bundle = new Bundle();
				bundle.putString("name", text);
				fragment5.setArguments(bundle);
				FragmentManager fragmentManager = getFragmentManager();
				FragmentTransaction beginTransaction = fragmentManager
						.beginTransaction();
				beginTransaction.add(R.id.layout, fragment5, "fragment5");
				beginTransaction.commit();
				Toast.makeText(MainActivity4.this, "向Fragment发送数据" + text,
						Toast.LENGTH_SHORT).show();
			}
		});	
		
		FragmentManager fragmentManager = getFragmentManager();
		Fragment findFragmentById = fragmentManager.findFragmentById(R.id.frag);
        MyFragment frag=(MyFragment) findFragmentById;
        frag.setAaa("fragment静态传值");
	}

	@Override
	public void thank(String code) {
		// TODO Auto-generated method stub
		Toast.makeText(MainActivity4.this, "已成功接收到" + code + ",客气了!",
				Toast.LENGTH_SHORT).show();
	}

}

MyFragment5文件

public class MyFragment5 extends Fragment{

	private String code="Thank you,Activity!";
	
	public MyListener listener;
	//创建接口
	public interface MyListener
	{
		public void thank(String code);
	}
	
	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub	
		listener=(MyListener) activity;
		super.onAttach(activity);
	}
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment2, container, false);
		TextView tv = (TextView) view.findViewById(R.id.text);
		String text=getArguments().get("name")+"";
        tv.setText(text);
		Toast.makeText(getActivity(), "已成功接收到"+text, Toast.LENGTH_SHORT).show();
		Toast.makeText(getActivity(), "向Activity发送"+code, Toast.LENGTH_SHORT).show();
		listener.thank(code);
		return view;
	}
}

布局文件main4

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送" />
    
    <fragment 
        android:id="@+id/frag"
        android:name="com.example.android_fragment.MyFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值