Android 底部导航与Fragment联动的实现
来源:互联网 发布:翼支付企业版下载软件 编辑:程序博客网 时间:2024/06/07 09:02
今天我要写的是常见的如微信一类的底部导航与Fragment联动的实现
1,首先,在每一个Fragment里写一个public权限的TAG,保证每个Fragment的TAG唯一。
2,在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" android:orientation="vertical" > <FrameLayout android:id="@+id/main_container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <RadioGroup android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="60dp" android:background="@drawable/abc_ab_bottom_transparent_light_holo" android:paddingTop="8dp" android:orientation="horizontal"> <RadioButton android:id="@+id/shouye_navigation" style="@style/main_navigation" android:text="@string/shouYe" android:textColor="@drawable/navigation_text_select" android:textSize="12sp" android:checked="true" android:drawableTop="@drawable/icon_shouye_select" /> <RadioButton android:id="@+id/fenlei_navigation" style="@style/main_navigation" android:text="@string/fenLei" android:textColor="@drawable/navigation_text_select" android:textSize="12sp" android:drawableTop="@drawable/icon_fenlei_select" /> <RadioButton android:id="@+id/ruanzhuangmofa_navigation" style="@style/main_navigation" android:text="@string/ruanZhuangMoFa" android:textColor="@drawable/navigation_text_select" android:textSize="12sp" android:drawableTop="@drawable/icon_ruanzhuangmofa_select" /> <RadioButton android:id="@+id/gouwuche_navigation" style="@style/main_navigation" android:text="@string/gouWuChe" android:textColor="@drawable/navigation_text_select" android:textSize="12sp" android:drawableTop="@drawable/icon_gouwuche_select" /> <RadioButton android:id="@+id/wo_navigation" style="@style/main_navigation" android:text="@string/wo" android:textColor="@drawable/navigation_text_select" android:drawableTop="@drawable/icon_wo_select" /> </RadioGroup></LinearLayout>
3,下面是MainActivity的示例代码:
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { private RadioGroup controller; //记录显示着的Fragment private Fragment cacheFragment; private FragmentManager fm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { controller = ((RadioGroup) findViewById(R.id.controller)); controller.setOnCheckedChangeListener(this); //获取一个FragmentManager实例 fm = getSupportFragmentManager(); //开启一个Fragment事物 FragmentTransaction transaction = fm.beginTransaction(); //事物中进行添加操作: //①添加的位置,ContainerViewId // ②Fragment,我们将要添加的碎片 //③String TAG,标记,为我们添加到Container中的Fragment添加标记. cacheFragment = new PageOneFragment(); transaction.add(R.id.container, cacheFragment, PageOneFragment.TAG); //提交事务 transaction.commit(); } /** * 当选中上网child改变的时候,就会回掉 * 不管child改变的来源,举个例子,由外界条件改变,造成RadioGroup中的子View改变 * 一个Button,控制选中状态改变,同样会回掉onCheckChange的方法。 * TODO:Fragment的hide,show * ①将显示着的Fragment隐藏 * ②将要加载的Fragment显示出来 * * @param group * @param checkedId */ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.controller_one: /*//开启一个Fragment事物 FragmentTransaction transaction = fm.beginTransaction(); //隐藏显示着的Fragment if (cacheFragment!=null){ transaction.hide(cacheFragment); } //加载要显示的Fragment *//** * ①根据TAG,去查找Fragment * ②如果根据TAG成功找到Fragment,我们就将目标Fragment显示出来。 * ③如果根据TAG未找到Fragment,则会返回给我们一个null,我们就需要 * 实例化一个Fragment,显示出来,并记录下来 *//* cacheFragment=fm.findFragmentByTag(PageOneFragment.TAG); if (cacheFragment!=null){ transaction.show(cacheFragment); }else{ cacheFragment=new PageOneFragment(); transaction.add(R.id.container,cacheFragment,PageOneFragment.TAG); } //提交事务 transaction.commit();*/ switchPage(PageOneFragment.TAG, PageOneFragment.class); break; case R.id.controller_two: switchPage(PageTwoFragment.TAG, PageTwoFragment.class); break; case R.id.controller_three: switchPage(PageTreeFragment.TAG, PageTreeFragment.class); break; case R.id.controller_four: switchPage(PageFourFragment.TAG, PageFourFragment.class); break; } } private void switchPage(String tag, Class<? extends Fragment> cls) { //开启一个Fragment事物 FragmentTransaction transactionFour = fm.beginTransaction(); //隐藏显示着的Fragment if (cacheFragment != null) { transactionFour.hide(cacheFragment); } //加载要显示的Fragment /** * ①根据TAG,去查找Fragment * ②如果根据TAG成功找到Fragment,我们就将目标Fragment显示出来。 * ③如果根据TAG未找到Fragment,则会返回给我们一个null,我们就需要 * 实例化一个Fragment,显示出来,并记录下来 */ cacheFragment = fm.findFragmentByTag(tag); if (cacheFragment != null) { transactionFour.show(cacheFragment); } else { try { //通过反射,使用无参构造一个Fragment实例 cacheFragment = cls.getConstructor().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } transactionFour.add(R.id.container, cacheFragment, tag); } //提交事务 transactionFour.commit(); }}
1 0
- Android 底部导航与Fragment联动的实现
- Android---------底部图标与Fragment的联动
- Android Fragment实现底部导航
- Fragment实现的底部导航
- Android个人学习笔记-底部导航切换Fragment的实现
- android基于Fragment实现底部导航切换
- xamarin android Fragment实现底部导航栏
- xamarin android Fragment实现底部导航栏
- Fragment实现底部导航
- Fragment之底部导航栏的实现
- Fragment底部导航栏的实现
- TabLayout+Fragment和底部导航联动
- Android 底部导航栏的使用 fragment
- fragment与底部菜单联动
- Android仿小米商城底部导航栏之二(BottomNavigationBar、ViewPager和Fragment的联动使用)
- 使用 Fragment 实现底部导航
- Fragment + RadioGroup实现底部导航
- viewpager+fragment实现底部导航
- 解决Android帧动画在Oncreate中启动只显示第一帧
- 剑指offer(30):数组中出现次数超过一半的数字
- 多核并行计算——学习总结
- @SuppressLint("NewApi")和@TargetApi()的区别
- Android中Touch事件的总结
- Android 底部导航与Fragment联动的实现
- ViewGroup中的控件点击不灵敏的问题
- 云之遥--素数
- Activiti-Explorer 用户名与密码
- 给 App 提速:Android 性能优化总结
- 使用Fragment建立动态UI
- 指针中那些容易被忽视的小事
- matlab 聚类
- CSU 1542 Flipping Parentheses