fragment的实现是独立于activity的,可以被用于多个activity,每个activity可包含同一个fragment的不同实例
fragment可调用getView()方法得到它所在activity对象,然后通过findviewbyid找到activity中的控件,VIew view = getView().findViewbyId();
activity也可以通过FragmentManager的方法查找它所包含的fragment content = (ContentFragment) getFragmentManager().findFragmentById(R.id.content);
假如
1、有TitleFragment显示标题
2、MainActivity,其中在MainActivity的布局里放定义fragment
<fragment
android:id="@+id/title"
class="com.ccc.fragment.TitleFragment"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
<fragment
android:id="@+id/content"
class="com.ccc.fragment.ContentFragment"
android:layout_width="0dip"
android:layout_weight="2"
android:layout_height="wrap_content"
/>
3、ContentFragment显示内容,当点击TitleFragment里的标题时,ContentFragment会显示相应的内容
首先是TitleFragment定义一个接口,MainActivity实现这个接口,并且回调接口相关方法,在这个方法里可以进行相应的操作,比如ContentFragment显示内容,前提是在
MainActivity通过FragmentManager找到ContentFragment
public class TitleFragment extends ListFragment {
private OnItemClickListener listener;
public void setListener(OnItemClickListener listener) {
this.listener = listener;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
String[] objects = new String[]{
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期天"
};
setListAdapter(new ArrayAdapter<String>(
getActivity(),
android.R.layout.simple_list_item_1,
android.R.id.text1, objects));
listener.onItemClick(0);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
listener.onItemClick(position);
}
/**
* 第1步
* @author ThinkPad
*
*/
interface OnItemClickListener{
void onItemClick(int position);
}
}
/**
* 第2步 让Activity实现TitleFragment里面的接口
* @author ThinkPad
*
*/
public class MainActivity extends Activity implements OnItemClickListener{
private TitleFragment title;
private ContentFragment content;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化TitleFragment 和 ContentFragment
FragmentManager fm = getFragmentManager();
title = (TitleFragment) fm.findFragmentById(R.id.title);
content = (ContentFragment) fm.findFragmentById(R.id.content);
/**
* 第3步
*/
//把接口对象传递给TitleFragment
//这里实现了接口,也就是说当前activity是子类,通过这个方法传递,调用TitleFragment
//的setListener进行初始化,就会调用TitleFragment里的onListItemClick()方法
title.setListener(this);
}
public void onItemClick(int position) {
// TODO Auto-generated method stub
content.updateInfo(position);
}
}
public class ContentFragment extends Fragment {
String[] objects = new String[]{
"星期一,唱歌ktv",
"星期二,爬山。。",
"星期三,购物 shopping ",
"星期四,打游戏。 ",
"星期五,看电影。。",
"星期六,休息。。",
"星期天,敲代码。。。"
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
TextView tv = new TextView(getActivity());
return tv;
}
/**
* 第4步 在ContentFragment里面定义一个方法
* @param position
*/
public void updateInfo(int position){
TextView tv = (TextView) getView();
tv.setText(objects[position]);
}
}