1。
简单的使用方法。在主布局加入2个fragment 布局
<fragment
android:id="@+id/f1"
android:name="com.example.fragment.f1" //继承Fragment 的之类
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<fragment
android:id="@+id/f2"
android:name="com.example.fragment.f2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
/>
public class f1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.f1, null); //填充布局
}
}
f2同上
2.
动态加载 Fragment
先在Activity写入
Fragment f1= new f1();
FragmentManager fm =getFragmentManager(); //获取管理器
FragmentTransaction ft =fm.beginTransaction(); //事务性质
ft.add(R.id.l1, f1); //增加 放入的布局的ID 后是f1的类
ft.commit(); //提交
生命周期
开始前先执行 Fragment的然后在执行Fragment的 销毁是 先销毁Fragment在Fragment的顺序
Fragment的 onCreate只会执行一次 适合初始化变量
3. 不同Fragment 获取数据
创建的时候 add(R.id.l1, f1,"标识"); 先加入标识
Fragment Fragment =(Fragment)getFragmentManager().findFragmentByTag("标识"); //获取管理器里的标识
Fragment.getView().findViewById(R.id.button1); //然后取得布局。。就可以去对应的值了。
4 让Fragment 支持回退操作
创建的时候 add(R.id.l1, f1,"标识"); 先加入标识
ft.addToBackStack(“标识”); 设置当前按返回键 回退到什么Fragment 不加 点返回键就退出了哦。。
5.
利用ListFragment 实现动态列表
首先创建类 继承ListFragment
public class listf extends ListFragment {
public ArrayList<String> lists;
private ArrayAdapter<String> ad;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lists=new ArrayList<String>();
for(int i=0;i<=10;i++){
lists.add("你好"+i);
}
ad =new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_1,lists);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setListAdapter(ad);
ad.notifyDataSetChanged();
return inflater.inflate(R.layout.a, null);
}
}
a.xml
<ListView android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
Activity
fm=getFragmentManager();
ft=fm.beginTransaction();
listf listf=new listf();
f1 f1=new f1();
ft.add(R.id.l1, listf, "listf");
ft.commit();
主布局 放入 l1 布局.
6.Fragment 传递值
创建
public class f2 extends Fragment {
TextView textView3;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String s= getArguments().getString("item");
View View =inflater.inflate(R.layout.c, null);
textView3=(TextView)View.findViewById(R.id.textView3);
textView3.setText(s);
return View;
}
在上面listf 加入单击事件
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String String = lists.get(position).toString(); //获取单击值
f2 f2 =new f2(); 新建碎片
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
Bundle bundle=new Bundle();
bundle.putString("item", String); 写入值
f2.setArguments(bundle); 传递
ft.replace(R.id.l2, f2); 替换布局
ft.commit();
}
7.
效果
ft.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out);
8 向下兼容
改成 导入import android.support.v4.app.FragmentManager;包
然后Activity 改成 FragmentActivity
getFragmentManager 改成 getSupportFragmentManager();
9.切换Fragment的办法
FragmentManager fm;
FragmentTransaction ft;
int t=0;//当前点击
int k=0;//上次打开
public List<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(new a());
fragments.add(null);
fragments.add(null);
fragments.add(null);
//首先加载第一屏
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.viewshow,fragments.get(0));
ft.commit();
点击事件内部。
switch (v.getId()) {
case R.id.imageButton1:
t=0;
Toast.makeText(getBaseContext(), "A", 1).show();
break;
case R.id.imageButton2:
t=1;
Toast.makeText(getBaseContext(), "B", 1).show();
break;
case R.id.imageButton3:
t=2;
Toast.makeText(getBaseContext(), "c", 1).show();
break;
case R.id.imageButton4:
t=3;
Toast.makeText(getBaseContext(), "D", 1).show();
break;
}
FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction();
ft2.hide(fragments.get(k));//隐藏上次打开
Fragment fragment1 = fragments.get(t);//获取本次要打开
if(fragment1==null)
{
Fragment nf=new_fragment(t);
fragments.set(t,nf);
ft2.add(R.id.viewshow,nf);
}
else
{
ft2.show(fragments.get(t));
}
k=t;
ft2.commit();
private Fragment new_fragment(int i) {
Fragment fragment;
switch (i) {
case 1:
fragment=new b();
break;
case 2:
fragment=new c();
break;
case 3:
fragment=new d();
break;
default:
fragment=new a();
break;
}
return fragment;
}