在Android中,Fragment是一种可重用的组件,可以被多个Activity或其他Fragment使用。使用Fragment可以实现多个Fragment在同一页面中显示,可以动态地添加、删除或替换Fragment,实现复杂的页面交互效果。
以底部菜单切换为例,在MainActivity中动态注册三个Fragment,然后通过底部菜单的点击事件来切换Fragment。
- 创建三个Fragment
public class FirstFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_first, container, false); } } public class SecondFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_second, container, false); } } public class ThirdFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_third, container, false); } }
- 在MainActivity中动态注册三个Fragment
public class MainActivity extends AppCompatActivity { private BottomNavigationView bottomNavigationView; private Fragment firstFragment, secondFragment, thirdFragment; private FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bottomNavigationView = findViewById(R.id.bottom_navigation_view); bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); fragmentManager = getSupportFragmentManager(); firstFragment = new FirstFragment(); secondFragment = new SecondFragment(); thirdFragment = new ThirdFragment(); fragmentManager.beginTransaction().add(R.id.fragment_container, thirdFragment, "3").hide(thirdFragment).commit(); fragmentManager.beginTransaction().add(R.id.fragment_container, secondFragment, "2").hide(secondFragment).commit(); fragmentManager.beginTransaction().add(R.id.fragment_container, firstFragment, "1").commit(); } private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_first: fragmentManager.beginTransaction().hide(secondFragment).hide(thirdFragment).show(firstFragment).commit(); return true; case R.id.navigation_second: fragmentManager.beginTransaction().hide(firstFragment).hide(thirdFragment).show(secondFragment).commit(); return true; case R.id.navigation_third: fragmentManager.beginTransaction().hide(firstFragment).hide(secondFragment).show(thirdFragment).commit(); return true; } return false; } }; }
- 在布局文件中添加底部菜单
<android.support.design.widget.BottomNavigationView android:id="@+id/bottom_navigation_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:menu="@menu/bottom_navigation_menu" />
- 创建底部菜单的菜单文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_first" android:icon="@drawable/ic_first" android:title="@string/navigation_first" /> <item android:id="@+id/navigation_second" android:icon="@drawable/ic_second" android:title="@string/navigation_second" /> <item android:id="@+id/navigation_third" android:icon="@drawable/ic_third" android:title="@string/navigation_third" /> </menu>
通过以上步骤,就可以实现底部菜单的切换效果,当点击不同的菜单项时,对应的Fragment就会显示出来,其他的Fragment则会被隐藏。