Fragment页面之间传值、基本例子演示、生命周期、兼容性

来源:互联网 发布:手机桌面归类软件 编辑:程序博客网 时间:2024/05/16 11:12
一、Fragment起初:
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的包导入即可解决问题!!!


0 0
原创粉丝点击