FragmentDemo

Fragment

一、介绍
模块化/可重用的组件
定义了自己的布局,通过使用它自己的生命周期回调方法定义了它自己的行为。可以将Fragment包含到多个Activity中。
1、创建Fragment,必须创建其子类或者继承已存在的子类
2、onCreateView()方法
返回View--可以为NULL
3、Fragment加载方式
 i:静态加载
 ii:动态加载

三、 生命周期

关键方法(至少实现加粗的这三个方法)
onCreateView();每次创建都会绘制fragment的View组件时回调该方法
onAttach();当Fragment被添加到Activity时会回调这个方法,并且只调用一次
onCreate();创建Fragment时会回调这个方法,并且只调用一次
onActivityCreated();当Fragment所在Activity启动完成后调用
onStart();启动fragment
onResume();恢复Fragment时会被回调,调用onStart()后面一定会调用onResume();
onPause();暂停
onStop();停止fragment
onDestroyView();销毁Fragment所包含的View组件时会调用
onDestroy();销毁Fragment会被回调
OnDetach();Fragment从Activity中删除时会回调该方法,只调用一次


下图为 fragment 的生命周期(它所在的 activity 处于运行状态)。


<span style="font-size:12px;">package huaxa.it.fragment;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity1 extends FragmentActivity implements OnCheckedChangeListener{
    private RadioGroup group;
	protected void onCreate(Bundle savedInstanceState) {
		// TODO 自动生成的方法存根
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main1);
		group = (RadioGroup) findViewById(R.id.radioGroup1);
		group.setOnCheckedChangeListener(this);
	}
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		// TODO 自动生成的方法存根
		switch (checkedId) {
		case R.id.radio0:
			Intent intent = new Intent(this,MainActivity2.class);
			startActivity(intent);
			//Toast.makeText(this, "点击有效果", Toast.LENGTH_SHORT).show();
			break;
		case R.id.radio1:
 			MyFragment2 myFragment2 = new MyFragment2();//初始化
 			android.support.v4.app.FragmentManager fragementManager = getSupportFragmentManager();//获得fragment的一个管理者
        	android.support.v4.app.FragmentTransaction beginTransaction = fragementManager.beginTransaction();//开启事务,获取事务的对象
 			beginTransaction.add(R.id.main1, myFragment2);//第一个参数MyFragment2加载到哪个布局,第二个参数是MyFragment2对象
 			beginTransaction.addToBackStack(null);//传递名字为空
 			beginTransaction.commit();
			break;
		case R.id.radio2:
			Intent intent2 = new Intent(this,MainActivity3.class);
			startActivity(intent2);
			break;
		case R.id.radio3:
			
			break;
		default:
			break;
		}
	}
}</span>

<span style="font-size:12px;">  MainActivity2:</span>

package huaxa.it.fragment;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity2 extends FragmentActivity {
    /** Called when the activity is first created. */
	private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        Button button = (Button) findViewById(R.id.button);
        tv = (TextView) findViewById(R.id.textview);
        button.setText("改变");
        button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				tv.setText("TextView改变了!");
			}
		});
    }
}
<span style="font-size:12px;">————MainActivity3:————</span>
package huaxa.it.fragment;

import huaxa.it.fragment.MyFragment3.MyListener;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity3 extends FragmentActivity implements MyListener{
	private EditText edit;
	private Button send;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO 自动生成的方法存根
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main3);
		edit = (EditText) findViewById(R.id.edit1);
		send = (Button) findViewById(R.id.send1);
		send.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				MyFragment3 myFragment3 = new MyFragment3();
				String text = edit.getText().toString();
				android.support.v4.app.FragmentManager fragementManager = getSupportFragmentManager();//获得fragment的一个管理者
				android.support.v4.app.FragmentTransaction beginTransaction = fragementManager.beginTransaction();//开启事务,获取事务的对象
				beginTransaction.add(R.id.main3, myFragment3);
				Bundle bundle = new Bundle();
				bundle.putString("sending", text);
				myFragment3.setArguments(bundle);
				beginTransaction.commit();
				Toast.makeText(MainActivity3.this, "已经发送出去了",Toast.LENGTH_SHORT).show();
				}
		});
		
		android.support.v4.app.FragmentManager fragementManager = getSupportFragmentManager();
		Fragment fragment = fragementManager.findFragmentById(R.id.frag);
		MyFragment1 frag = (MyFragment1) fragment;
		frag.setAbc("静态传送数值已发送!");
	}
	public void thanks(String code) {
		// TODO 自动生成的方法存根
		Toast.makeText(MainActivity3.this, "谢谢收到了"+code,Toast.LENGTH_SHORT).show();
	}
}


<span style="font-size:12px;">————Fragment1:————</span>
package huaxa.it.fragment;


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;
import android.widget.Toast;


public class MyFragment1 extends Fragment  {
	private String abc;
	private Button button;
	
	public String getAbc() {
		return abc;
	}

	public void setAbc(String abc) {
		this.abc = abc;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		//inflate是把Layout形成一个以view类实现成的对象,onCreateView需要返回View的对象,所以改写return
		/*传递一个布局文件,第一个参数是:fragment需要加载的布局文件;
		*第二个参数:想让Fragment的对象放到activity中,必须将root放在ViewGroup来=加载layout布局文件的父ViewGroup;
		*第三个参数:True,返回ViewGroup
		**/
		View view = inflater.inflate(R.layout.fragment1, container, false);
		//布局文件放在view里面所以需要加上view.,否则会报错
		TextView textview = (TextView) view.findViewById(R.id.textview);
		textview.setText("静态加载Fragment");
	    button = (Button) view.findViewById(R.id.button);
	    button.setText("获取内容");
	    button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				String text = getAbc();
				Toast.makeText(getActivity(), "已接收到静态传值"+text, Toast.LENGTH_SHORT).show();
			}
		});
		return view;
		//return super.onCreateView(inflater, container, savedInstanceState);
	}
}
————Fragment2:————
package huaxa.it.fragment;

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 MyFragment2 extends Fragment  {
	private TextView textview;
	private Button button;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		//inflate是把Layout形成一个以view类实现成的对象,onCreateView需要返回View的对象,所以改写return
		/*传递一个布局文件,第一个参数是:fragment需要加载的布局文件;
		*第二个参数:想让Fragment的对象放到activity中,必须将root放在ViewGroup来=加载layout布局文件的父ViewGroup;
		*第三个参数:True,返回ViewGroup
		**/
		View view = inflater.inflate(R.layout.fragment1, container, false);
		//布局文件放在view里面所以需要加上view.,否则会报错
		textview = (TextView) view.findViewById(R.id.textview);
		textview.setText("动态加载Fragment");
		button = (Button) view.findViewById(R.id.button);
        button.setText("改变");
        button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				textview.setText("TextView改变了!");
			}
		});
     
		return view;
		//return super.onCreateView(inflater, container, savedInstanceState);
	}
}

————Fragment3:————
package huaxa.it.fragment;

import android.app.Activity;
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;
import android.widget.Toast;

public class MyFragment3 extends Fragment{
	private TextView textview;
	private Button button;
	private String code = "Thanks very much!";
	private MyListener listener;
	public interface MyListener{
		public void thanks(String code);
	}
	public void onAttach(Activity activity) {
	// TODO 自动生成的方法存根
	listener = (MyListener) activity; 
	super.onAttach(activity);
	}
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
		Bundle savedInstanceState) {
	// TODO 自动生成的方法存根
	View view = inflater.inflate(R.layout.fragment1, container, false);
	//布局文件放在view里面所以需要加上view.,否则会报错
	textview = (TextView) view.findViewById(R.id.textview);
	textview.setText("动态加载Fragment");
	String text = getArguments().get("sending")+"";
	Toast.makeText(getActivity(), "fragment已经接收到了"+text,Toast.LENGTH_SHORT).show();
	Toast.makeText(getActivity(), "fragment发送了"+code,Toast.LENGTH_SHORT).show();
	listener.thanks(code);
	button = (Button) view.findViewById(R.id.button);
	button.setOnClickListener(new OnClickListener() {
		
		public void onClick(View v) {
			// TODO 自动生成的方法存根
			textview.setText("加载方式改变了!");
		}
	});
	return view;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值