一、Fragment起初:
3.0以后版本推出的Fragment
二、Fragment之间的通讯:
程序要求:创建一个侧边栏效果的fragment布局,左边是新闻分类列表,右面是没一个模块的内容。
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class FragmentList extends Fragment implements OnItemClickListener {
private String[] objects = {"新闻", "娱乐", "财经", "科技", "生活", "新闻", "娱乐", "财经", "科技", "生活"};
private int[] imageArray = {
R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5,
R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("onCreateView");
ListView mListView = (ListView) inflater.inflate(R.layout.fragment_list, null);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1, objects);
mListView.setAdapter(adapter);
// 设置ListView的item的点击事件
mListView.setOnItemClickListener(this);
return mListView;
}
/**
* 当ListView的子条目被点击时回调此方法, position 被点击那个item的索引
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String text = objects[position];
int imageId = imageArray[position];
// Fragment界面之间的通信【】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】这个是重点!!!
FragmentContent fc = (FragmentContent)
getActivity() // 获得上下文对象
.getSupportFragmentManager() // 获得Fragment管理器
.findFragmentById(R.id.fragment_content); // 通过Fragment管理器根据id找到对应的fragment
fc.setNewText(text);
fc.setNewIcon(imageId);
}
@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);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
System.out.println("onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@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();
}
@Override
public void onDestroyView() {
System.out.println("onDestroyView");
super.onDestroyView();
}
@Override
public void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
System.out.println("onDetach");
super.onDetach();
}
}
2、FragmentContent.java文件的内容:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class FragmentContent extends Fragment {
private TextView tvNews;
private ImageView ivNewPic;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_content, null);
tvNews = (TextView) view.findViewById(R.id.tv_news);
ivNewPic = (ImageView) view.findViewById(R.id.iv_new_pic);
return view;
}
/**
* 设置新闻文本
* @param text
*/
public void setNewText(String text) {
// 修改TextView的内容
tvNews.setText(text);
}
/**
* 设置新闻图片
* @param text
*/
public void setNewIcon(int id) {
// 修改ImageView的图片
ivNewPic.setImageResource(id);
}
3.0以后版本推出的Fragment
二、Fragment之间的通讯:
程序要求:创建一个侧边栏效果的fragment布局,左边是新闻分类列表,右面是没一个模块的内容。
1、FragmentList.java文件的代码:
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.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class FragmentList extends Fragment implements OnItemClickListener {
private String[] objects = {"新闻", "娱乐", "财经", "科技", "生活", "新闻", "娱乐", "财经", "科技", "生活"};
private int[] imageArray = {
R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5,
R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("onCreateView");
ListView mListView = (ListView) inflater.inflate(R.layout.fragment_list, null);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1, objects);
mListView.setAdapter(adapter);
// 设置ListView的item的点击事件
mListView.setOnItemClickListener(this);
return mListView;
}
/**
* 当ListView的子条目被点击时回调此方法, position 被点击那个item的索引
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String text = objects[position];
int imageId = imageArray[position];
// Fragment界面之间的通信【】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】这个是重点!!!
FragmentContent fc = (FragmentContent)
getActivity() // 获得上下文对象
.getSupportFragmentManager() // 获得Fragment管理器
.findFragmentById(R.id.fragment_content); // 通过Fragment管理器根据id找到对应的fragment
fc.setNewText(text);
fc.setNewIcon(imageId);
}
@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);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
System.out.println("onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@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();
}
@Override
public void onDestroyView() {
System.out.println("onDestroyView");
super.onDestroyView();
}
@Override
public void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
System.out.println("onDetach");
super.onDetach();
}
}
2、FragmentContent.java文件的内容:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class FragmentContent extends Fragment {
private TextView tvNews;
private ImageView ivNewPic;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_content, null);
tvNews = (TextView) view.findViewById(R.id.tv_news);
ivNewPic = (ImageView) view.findViewById(R.id.iv_new_pic);
return view;
}
/**
* 设置新闻文本
* @param text
*/
public void setNewText(String text) {
// 修改TextView的内容
tvNews.setText(text);
}
/**
* 设置新闻图片
* @param text
*/
public void setNewIcon(int id) {
// 修改ImageView的图片
ivNewPic.setImageResource(id);
}
}
三、Fragment生命周期
onAttach 当Fragment绑定在Activity时执行
onCreate 当Fragment创建时执行
onCreateView Fragment创建布局
onActivityCreated 当Activity创建完成时.
onStart Fragment开启
onResume 当Fragment获取焦点时回调, 这时候Fragment已经可以和用户交互了.
onPause Fragment暂停时.
onStop Fragment停止
onDestroyView Fragment销毁布局时
onDestroy Fragment销毁
onDetach 把当前Fragment从Activity中解绑
四、兼容性
在安卓3.0之前是没有fragment控件的,所以呢,为了能让安卓2.3的用户可以使用到fragment控件,这里可以使用一个扩展包,一个名字叫做:android-support-v4.jar的包导入即可解决问题!!!