Android Fragment 初相识(二)
来源:互联网 发布:linux nfs配置 编辑:程序博客网 时间:2024/06/02 01:20
Android Fragment 初相识(二)
导读:
【1】Fragment 怎么兼容低版本(3.0)?(现在不常用)【2】Fragment 的生命周期
【3】实现 Fragment 之间的通信。
小知识: 快速的修改应用的包名 。
【1】Fragment 怎么兼容低版本(3.0)?(现在不常用)
在实现低版本手机的Fragment的需求时,需要使用Android v4 支持包 (android-support-v4.jar)需要更改三个地方:
[1]定义fragment继承V4包中的Fragment
[2]定义的activity要继承v4包中的FragmentActivity
[3]通过这个方法getSupportFragmentManager 获取Fragment的管理者
【1】更改继承的Fragment 的导入包,选择(android-support-v4.jar)
【2】更改Activity 的导入包
【3】获取Fragment 的管理者的方式不一样,使用getSupportFragmentManager()
【2】Fragment 的生命周期
Fragment 的生命周期 于 Activity 的生命周期相似,在Fragment 中最主要的重写的方法是 onCreateView() 和 onDestory() 方法
package cn.edu.aynu.fangweixin;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import cn.edu.aynu.shengming.R;
public class Fragment_friend extends Fragment {
// 依附在Activity 上面
@Override
public void onAttach(Activity activity) {
System.out.println("onAttach");
super.onAttach(activity);
}
// 创建
@Override
public void onCreate(Bundle savedInstanceState) {
System.out.println("onCreate");
super.onCreate(savedInstanceState);
}
// Fragment 加载一个布局,显示Fragment 的内容
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// [1]
View v = inflater.inflate(R.layout.fragment_friend, null);
System.out.println("onCreateView");
return v;
}
// 在 onActivityCreated 中,view 完全初始化了
@Override
public void onActivityCreated(Bundle savedInstanceState) {
System.out.println("onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
// 当页面可见。Activity 可见
@Override
public void onStart() {
System.out.println("onStart");
super.onStart();
}
// 获取焦点 (就是在布局上面有 按钮或者其它的点击事件,可以进行点击)
@Override
public void onResume() {
System.out.println("onResume");
super.onResume();
}
// 失去焦点
@Override
public void onPause() {
System.out.println("onPause");
super.onPause();
}
// 当界面不可见
@Override
public void onStop() {
System.out.println("onStop");
super.onStop();
}
// 与 onCreateView 对象,在onCreateView 初始化的方法在onDestoryView 就销毁掉了
@Override
public void onDestroyView() {
System.out.println("onDestroyView");
super.onDestroyView();
}
// 不可见
@Override
public void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
// 取消依附在Activity 上面
@Override
public void onDetach() {
System.out.println("onDetach");
super.onDetach();
}
}
【1】第一次开启界面打印Log。 先依附的Activity ,创建,创建view ,将view 在Activity 上加载完成,视图可见,获取焦点。
【2】按Home 键,失去焦点,界面不可见
【3】按返回键,退出应用。失去焦点,界面不可见,销毁onCreateView 生成的view ,销毁,取消在Activity 上的依附
[1]使用Fragment必须重写onCreateView方法
[2]还可以重写一个ondestroy方法 做一些收尾的工作
【3】实现 Fragment 之间的通信(小案例:点击左边的按钮,改变右边的文字)。
Fragment有一个公共的桥梁 Activity。
关键代码:MainActivity.java
//[1]获取一个Fragment 的管理者
FragmentManager fragmentManager = this.getFragmentManager();
//[2]开启事务
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
//[3]使用了三个参数的方法,用于设置一个标签,来实现拿到 Fragment的实例对象
FragmentTransaction replace1 = beginTransaction.replace(R.id.linear1, new Fragment01(), "f1");
FragmentTransaction replace2 = beginTransaction.replace(R.id.linear2, new Fragment02(), "f2");
//[4]提交事务
beginTransaction.commit();
继承Fragment 的实现类 Fragment01.java 就是左边的Fragment ,有一个按钮
package cn.edu.aynu.tongxin;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Toast;
public class Fragment01 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// [1]使用inflater 来实现将布局文件 转化为 view
View view = inflater.inflate(R.layout.fragment01, null);
view.findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 实现对点击事件的监听
Toast.makeText(getActivity(), "getActivity", 0).show();
// [1]我们通过 getActivity 的方法返回我们的Fragment 的管理者,通过标签为“f2”来拿到我们的实现类 Fragment
Fragment02 f2 = (Fragment02) getActivity().getFragmentManager().findFragmentByTag("f2"); // 调用实现的方法 改变文本内容
f2.changeText("哈哈哈哈,我改变了");
}
});
return view;
}
}
在Fragment 中打印Toast
Toast.makeText(getActivity(), "getActivity", 0).show();
Fragment中拿不到界面的Context,所以主要是通过 getActivity()中相当于拿到Context 对象。一般无法实现Toast 的方法的,就是拿不到Context 对象。
继承Fragment 的实现类 Fragment02.java 就是右边需要改变的文本内容
package cn.edu.aynu.tongxin;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.view.ViewGroup;
public class Fragment02 extends Fragment {
private TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// [1]使用inflater 来实现将布局文件 转化为 view
View view = inflater.inflate(R.layout.fragment02, null);
text = (TextView) view.findViewById(R.id.text);
return view;
}
public void changeText(String content){
text.setText(content);
}
}
效果:
小知识: 快速的修改应用的包名 。
第一步:右键项目名->Android Tools->Rname Application Package
第二步:修改项目名称
第三步:Finish
1 0
- Android Fragment 初相识(二)
- Android FragMent 的初相识(一)
- Linux初相识(二)
- Linux初相识(一)
- android fragment解析(二)
- Android之Fragment(二)
- Android面试(二)Fragment
- Rxjava(一):与Rxjava初相识
- 与君(指针)初相识
- 一位码农的人生自述(二十)------相识
- Android Fragment详解(二):fragment创建及其生命周期
- Android--Fragment的使用(二)-滑动Fragment的使用
- Android Fragment学习笔记(二)
- Android Fragment学习笔记(二)
- Android类参考---Fragment(二)
- Android Fragment学习笔记(二)
- Android类参考---Fragment(二)
- Android类参考---Fragment(二)
- poj-3666
- HTTP中GET和POST的区别
- DLL编程和两种调用方法调用
- 微信小程序开发之常见问题 不在以下合法域名列表中 wx.request合法域名配置
- 【寒江雪】扫描线区域填充算法
- Android Fragment 初相识(二)
- DataGrid 用法示例
- 【寒江雪】直线裁切算法
- Java_类_多态
- 初识Unity 3D——基本脚本代码
- Linux Centos安装eclipse并创建桌面快捷方式
- Ubuntu16.04清理boot分区
- App性能优化
- Unity教程——Simplex噪声