android中fragment的实现,完全取代选项卡

时间:2022-05-20 06:29:15
计算机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_fragmentnull);
      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_fragmentnull);
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以后才可以使用.