碎片(Fragment)是一个可以合理分配屏幕的UI片段。
除主界面外,新建碎片布局文件(xml文件),在其xml文件相对应的.java文件中继承Fragment,
public class LeftFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ View view=inflater.inflate(R.layout.left_fragment,container,false); returnview; } }
然后修改主布局文件:
<fragment android:id="@+id/left_fragment" android:name="com.example.fragmenttest.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" />
动态添加碎片布局:
1.创建待添加的碎片实例。
2.获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。
3.开启一个事务,通过调用beginTransaction()方法开启。
4.向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例(也就是.Java文件的对象)。
5.提交事务,调用commit()方法来完成。
public void onClick(Viewv){ switch(v.getId()){ case R.id.button: AnotherRightFragment fragment = new AnotherRightFragment(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager. beginTransaction(); transaction.replace(R.id.right_layout,fragment); transaction.commit(); break; default: break; } }
添加布局模拟返回上一层,即点击back键返回上一层页面,跳转前的页面,在提交事务之前添加一个addToBackStack()方法,
transaction.addToBackStack(null);
还有碎片和活动之间的通讯,调用一个indFragmentById()方法,
1 RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
-
这样就可以在活动中调用碎片里面的方法了。
在碎片中调用活动中的方法大致相同,MainActivity mainActivity = (MainActivity) getActivity();
所谓的活动就是你项目的主函数mainActivity