计算机113 郭超
Fragment的基本使用
-如何在屏幕中嵌入两个Fragment
1. 首先创建两个java类,让这个类继承Fragment
public class ListFragment extends Fragment{
ListView lv;
MainActivity ac;
String [] items = {"aaa","bbb","ccc"};
//和activity方法相似
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(ac,android.R.layout.simple_list_item_1 ,items);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ac.sendMsgToTextFragment(position);
}
});
}
//返回一个activity有实例
public void onAttach(Activity activity) {
super.onAttach(activity);
ac = (MainActivity) activity;
}
//创建在此碎片上显示的视图
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.list_fragment, null);
lv = (ListView) v.findViewById(R.id.listView1);
return v;
}
}
public class TextFragment extends Fragment{
TextView tv;
public void getMessage(int position){
tv.setText("position"+position);
}
public void onActivityCreated(Bundle savedInstanceState) {
}
public void onAttach(Activity activity) {
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.text_fragment, null);
tv = (TextView) v.findViewById(R.id.textView1);
return v;
}
}
2. 要想将这两个碎片文件组合在一起,就必须通过一个activity。
做法是在这个activity文件中加入fragment标签。如下所示:
<fragment
android:id="@+id/listf"
<!—设置要包含碎片文件的位置--> android:name="com.example.android_uplooking_day2.ListFragment"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/tvf"
<!--设置要包含碎片文件的位置-->
android:name="com.example.android_uplooking_day2.TextFragment"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
这样就可以在activity中显示两个碎片文件了。
-两个Fragment之前如何通信
要实现两个碎片之间的通信,就需要在通过activity来实现他们之间的交互。
例如:有两个碎片文件ListFragment和TextFragment。点击ListFragment上面的列表。要在TextFragment上面显示哪一个列被点击了。这就需要ListFragment给TextFragment发一个消息。TextFragment接收到这个消息,将它显示出来。
要实现这一过程,就需要在碎片里面使用activity对象。调用显示碎片的activity对象中的一个方法。这个方法接受到消息后。通过FragmentManager获得TextFragment碎片对象,然后通过TextFragment对象调用TextFragment中的方法,将传递过来的消息打印出来。
FragmentManager fm = getFragmentManager();
TextFragment tf = (TextFragment) fm.findFragmentById(R.id.tvf);
tf.getMessage(position);
-如何增加/删除/替换Fragment
-Fragment常用的三个方法:
1. onActivityCreated类似Activity的onCreate方法
2. onCreateView中构建界面&获得组件对象
3. onAttach获得外部的Activity(上下文)
Tab的替代品 Fragment 在3.0以后才可以使用.