一:Fragment的基本使用方法
1.
Fragment用于activity中切换界面使用,只是切换Fragment中的内容,activity没有被切换。
2.
Fragment的生命周期方法与activity一致,fragment切换时旧fragment对象会销毁,新的fragment对象会被创建。
3.
在layout中定义fragment.xml文件,并在main.xml中定义一个Framelayout作为Fragment的容器。
4.
新建java类Fragment.java继承Fragment类,重写方法返回view对象作为Framelayout中的内容。
5.
main_activity.java中,响应点击事件,填充布局。
代码:
layout_main.xml:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment_01"
android:onClick="click1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment_02"
android:onClick="click2"/>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/f1"
></FrameLayout>
fragment.java:
public class Fragment_01 extends Fragment {
//返回的view对象会作为fragment_01的内容显示在屏幕上
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_01, null);
return v;
}
}
mainactivity.java:
public void click1(View v){
//把fragment_01显示至帧布局当中
//创建fragment对象
Fragment_01 fg1 = new Fragment_01();
//获取fragment管理器
FragmentManager fm = getFragmentManager();
//打开事务
FragmentTransaction ft = fm.beginTransaction();
//把内容显示到帧布局
ft.replace(R.id.f1, fg1);
//提交
ft.commit();
}
二.Fragment与activity的通信
布局和上述的类似,只是多了几个EditText.
1.activity向fragment中传递数据
首先在fragment.java文件写出需要实现的方法:
public class Fragment_01 extends Fragment {
private TextView tv;
//返回的view对象会作为fragment_01的内容显示在屏幕上
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_01, null);
tv = (TextView) v.findViewById(R.id.tv);
return v;
}
public void setText(String text){
tv.setText(text);
}
}
其次在activity中调用上述fragment中的方法:
public void click4(View v){
EditText et_main = (EditText) findViewById(R.id.et_main);
String text = et_main.getText().toString();
//传递数据,fg1为上述fragment.java的对象
fg1.setText(text);
}
2.fragment向activity中传递数据
在main_activity中定义方法:
public void setText(String text){
EditText et_main = (EditText) findViewById(R.id.et_main);
et_main.setText(text);
}
在fragment.java中调用activity中的方法
public class Fragment_02 extends Fragment {
//返回的view对象会作为fragment_02的内容显示在屏幕上
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_02, null);
final EditText et = (EditText) v.findViewById(R.id.et_frag);
Button bt = (Button) v.findViewById(R.id.B_frag);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text = et.getText().toString();
//获取activity的对象 ((MainActivity)getActivity()).setText(text);
}
});
return v;
}
}