Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块。
一,一个简单的fragment
1.创建两个局部文件,用于等待被调用
(1)left_fragment
(2)right_fragment
2.分别创建两个继承于fragment类的类
(1)leftFragment(加载xml文件)
public class LeftleftFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.left_fragment,container,false);//动态加载xml return view; } }
(2)rightFragment
我是代码(同上);
3.在activity所调用的xml中添加<fragment>控件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/left_fragment" android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1"/> <fragment android:id="@+id/right_fragment" android:name="com.cenzhongman.myapplication.fragment.RightFragment" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1"/> </LinearLayout>
二,动态切换fragment
4.在原基础之上创建AnotherRightFragment(指向要调用的layout)
我是代码(同上,较少重复加载)
5.在MainActivity所调用xml中更改布局方式
用两FrameLayout(强制左上角对齐的布局),来存放fragment,动态更新时候将会更换FrameLayout中的内容,也就是旗下的FrameLayout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/left_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> <fragment android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fragment" /> </FrameLayout> <FrameLayout android:id="@+id/right_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> <fragment android:name="com.cenzhongman.myapplication.fragment.RightFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </LinearLayout>
6.在MainActivity中更换fragment
public void onClick(View v) {
AnotherRightFragment anotherRightFragment = new AnotherRightFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_fragment, anotherRightFragment);
transaction.commit();//必须调用commit()方法,否则显示不出来
}
1. 创建待添加的碎片实例。
2. 获取到 FragmentManager,在活动中可以直接调用 getFragmentManager()方法得到。
3. 开启一个事务,通过调用 beginTransaction()方法开启。
4. 向容器内加入碎片,一般使用 replace()方法实现,需要传入容器的 id 和待添加的碎
片实例。
5. 提交事务,调用 commit()方法来完成。
三,把fragment添加到返回栈
transaction.addToBackStack(null);//接收一个名字用于描述返回栈的状态,一般传入null即可
用fragment来做导航
1.在MainActivity的xml留出用于装fragment的容器
2.写好Fragment的xml描述文件
3.写四个Fragment的实现类,继承于Fragment
public class IdeaFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_idea,container,false); return view; } }
4.MainActivity应继承于FragmentActivity,并创建Fragment对象
//定义fragment对象,基于v4包 private Fragment study_fragment; private Fragment app_fragment; private Fragment idea_fragment; private Fragment personal_fragment; //定义fragmentManager对象 FragmentManager mFragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFragmentManager = getSupportFragmentManager();//基于v4包
initView(); }
5.得到FragmentTransaction对象,并根据情况选择添加或者显示fragment
!!!一定要commit()!!!
FragmentTransaction transaction = mFragmentManager.beginTransaction(); idea_Button.setImageResource(R.drawable.idea_blue); idea_TextView.setTextColor(getResources().getColor(R.color.sky_blue)); if (idea_fragment == null) { idea_fragment = new IdeaFragment(); transaction.add(R.id.content, idea_fragment); transaction.commit(); } else { transaction.show(idea_fragment); transaction.commit(); }
参考资料:Fragment之底部导航栏的实现